首页
下载
文档
社区
视频
捐赠
源代码
赞助商
AOT 编译器
AI 助理
商业产品
PHP AOT 原生编译器
Swoole-Compiler 代码加密器
CRMEB 新零售社交电商系统
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
协程Websocket服务器如何发送广播?
### 问题描述 想从异步Websocket切换到协程方式 之前广播是遍历存fd数组,协程版的push方法不能传fd参数了 如何实现广播呢
发布于6年前 · 3 次浏览 · 来自
提问
Pty
### 问题描述 想从异步Websocket切换到协程方式 之前广播是遍历存fd数组,协程版的push方法不能传fd参数了 如何实现广播呢
赞
0
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
登录
后参与评论
评论
2020-08-12
桶
桶哥
可以直接存 $ws 对像 ,然后遍历push就行了。 协程版本的server也是单线程的,可以直接遍历了。
赞
0
回复
2020-08-12
Pty
回复
桶哥
我目前就是这么做的,谢谢!
赞
0
回复
2020-12-30
偎徕
回复
桶哥
请问多进程的情况下 $ws对象如何存贮取用
赞
0
回复
2020-08-13
鲁飞
```php function getObjectId(\Swoole\Http\Response $response) { if (PHP_VERSION_ID < 70200) { $id = spl_object_hash($response); } else { $id = spl_object_id($response); } return $id; } Co\run(function () { $server = new Co\Http\Server("127.0.0.1", 9501, false); $server->handle('/websocket', function ($request, $ws) { $ws->upgrade(); global $wsObjects; $wsObjects[getObjectId($ws)] = $ws; while (true) { $frame = $ws->recv(); if ($frame->data == '') { unset($wsObjects[getObjectId($ws)]); $ws->close(); break; } else if ($frame->data === false) { echo "error : " . swoole_last_error() . "\n"; break; } else { if ($frame->data == "close") { unset($wsObjects[getObjectId($ws)]); $ws->close(); return; } foreach ($wsObjects as $obj) { $obj->push("Server:{$frame->data}"); } } } }); $server->start(); }); ```
赞
0
回复