首页
下载
文档
社区
视频
捐赠
源代码
赞助商
AOT 编译器
AI 助理
商业产品
PHP AOT 原生编译器
Swoole-Compiler 代码加密器
CRMEB 新零售社交电商系统
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
异步风格的写法,如何同时开启http和websocket?
### 问题描述 看文档有addlistener方法,我试了一下直接用addlistener返回的对象注册了websocket的方法,然后ws连接9502,但好像还是被当成http处理了 ### 相关代码 ```php $http = new Swoole\Http\Server('0.0.0.0', 9501); $http->on('Request', function ($request, $response) { var_dump($request); var_dump($response); $response->header('Content-Type', 'text/html; charset=utf-8'); $response->end('<h1>Hello Swoole. #' . rand(1000, 9999) . '</h1>'); }); $server=$http->addlistener('0.0.0.0', 9502,SWOOLE_SOCK_TCP); $server->set([ 'open_websocket_protocol' => true, // 设置使得这个端口支持WebSocket协议 ]); $server->on('open', function ($server, $req) { echo "connection open: {$req->fd}\n"; }); $server->on('message', function ($server, $frame) { echo "received message: {$frame->data}\n"; $server->push($frame->fd, json_encode(['hello', 'world'])); }); $server->on('close', function ($server, $fd) { echo "connection close: {$fd}\n"; }); $http->start(); ``` ###出错信息如下 connection open: 1 received message: sdfsdfds Fatal error: Uncaught Error: Call to undefined method Swoole\Http\Server::push() in /test/swoole/h.php:24
发布于4年前 · 17 次浏览 · 来自
提问
chen0520
### 问题描述 看文档有addlistener方法,我试了一下直接用addlistener返回的对象注册了websocket的方法,然后ws连接9502,但好像还是被当成http处理了 ### 相关代码 ```php $http = new Swoole\Http\Server('0.0.0.0', 9501); $http->on('Request', function ($request, $response) { var_dump($request); var_dump($response); $response->header('Content-Type', 'text/html; charset=utf-8'); $response->end('<h1>Hello Swoole. #' . rand(1000, 9999) . '</h1>'); }); $server=$http->addlistener('0.0.0.0', 9502,SWOOLE_SOCK_TCP); $server->set([ 'open_websocket_protocol' => true, // 设置使得这个端口支持WebSocket协议 ]); $server->on('open', function ($server, $req) { echo "connection open: {$req->fd}\n"; }); $server->on('message', function ($server, $frame) { echo "received message: {$frame->data}\n"; $server->push($frame->fd, json_encode(['hello', 'world'])); }); $server->on('close', function ($server, $fd) { echo "connection close: {$fd}\n"; }); $http->start(); ``` ###出错信息如下 connection open: 1 received message: sdfsdfds Fatal error: Uncaught Error: Call to undefined method Swoole\Http\Server::push() in /test/swoole/h.php:24
赞
0
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
登录
后参与评论
评论
2022-05-11
Rango
需要将`Swoole\Http\Server`改成`Swoole\WebSocket\Server`,`push`方法只有` Swoole\WebSocket\Server`有的
赞
1
回复
2022-05-11
chen0520
回复
Rango
我之前想的方法是混用协程风格的websocket,如果是要混用的话,websocket的代码应该放在哪里合适呢?我试了下在onworkstart里面开了一个协程执行websocket,好像没什么问题。
赞
0
回复
2022-05-11
Rango
可以在 `onWorkerStart` 中启动一个 `Swoole\Coroutine\Http\Server`实现`WebSocket`的功能。
赞
0
回复