首页
下载
文档
社区
视频
捐赠
源代码
赞助商
AOT 编译器
AI 助理
商业产品
PHP AOT 原生编译器
Swoole-Compiler 代码加密器
CRMEB 新零售社交电商系统
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
关于广播的性能问题
线上测试过很久,正常阿里云16核或者32核机器,连接数在8000-10000的话,遍历广播256字节左右的消息,大概耗时80-100ms左右,这个并不能通过开多个processer或者worker来提高。 可以通过多开几个swoole服务来分担,但是这样增加了维护以及调配的成本。 想问下大佬,swoole未来会支持多进程发送消息吗?
发布于5年前 · 23 次浏览 · 来自
讨论
jungle
线上测试过很久,正常阿里云16核或者32核机器,连接数在8000-10000的话,遍历广播256字节左右的消息,大概耗时80-100ms左右,这个并不能通过开多个processer或者worker来提高。 可以通过多开几个swoole服务来分担,但是这样增加了维护以及调配的成本。 想问下大佬,swoole未来会支持多进程发送消息吗?
赞
0
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
登录
后参与评论
评论
2021-03-11
序冢
32核的机器我认为可以开64个进程,每次建立连接,存储到当前进程的数组里,然后可以在收到要发生广播通知后,使用 $server->sendMessage()给所有进程发送通知,激活onPipeMessage回调,然后在onPipeMessage里遍历当前进程池维护下的连接池,从而可以充分利用cpu多核优势啦
赞
0
回复
2021-03-13
yiyi
开task进程处理广播消息呢?我就是这么干的,1W连接数效果还不错
赞
0
回复
2021-03-21
jungle
回复
yiyi
感谢大佬回复,你的1w连接数广播时间是多少呢?
赞
0
回复
2021-03-13
Rango
可以使用 `Task` 功能,将广播任务放到 `TaskWorker` 中运行。
赞
0
回复
2021-03-21
jungle
回复
Rango
感谢大佬,我试试看,但是我看文档描述所有的连接维护都在主进程,用task能提高广播性能吗?因为我之前试过开多个process,分别广播,总时长差不多。
赞
0
回复
2021-03-22
jungle
回复
Rango
刚琢磨了一阵,```cpp #使用 addProcess 添加的用户进程中无法使用 task 投递任务,请使用 sendMessage 接口与 Worker/Task 进程通信 ``` 由于广播是服务器其他事件引起的,所以是用addprocess的进程来进行广播,太难了,看起来无法使用task。
赞
0
回复
2021-04-20
hans941
每秒广播10万个消息给客户端,感觉性能可以了。 要是有大量消息需要广播的话,放队列里,起多个process或者直接用task去消费不就行了。 process和task是可以和master进程通信的。只要不是master进程发送瓶颈就没问题吧?
赞
0
回复
2021-06-17
jungle
回复
hans941
感觉就是master进程的发送瓶颈,不过想来也是,换算过来,每秒已经有接近10万的性能了。现在的解决方案是多开几个,然后用负载均衡。
赞
0
回复