首页
下载
文档
社区
视频
捐赠
源代码
赞助商
AOT 编译器
AI 助理
商业产品
PHP AOT 原生编译器
Swoole-Compiler 代码加密器
CRMEB 新零售社交电商系统
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
Swoole Process如何导出多于1个Socket?
Swoole Process的exportSocket()方法多次调用都返回同一个,这个和文档一致,没有问题。 然而我的需求是,需要多开几个socket通向process,搞一个连接池,方便不同协程中IPC调用,就像MySQL连接池那样。 请问怎么解决? 非常感谢!
发布于6年前 · 0 次浏览 · 来自
提问
Reasno
Swoole Process的exportSocket()方法多次调用都返回同一个,这个和文档一致,没有问题。 然而我的需求是,需要多开几个socket通向process,搞一个连接池,方便不同协程中IPC调用,就像MySQL连接池那样。 请问怎么解决? 非常感谢!
赞
0
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
登录
后参与评论
评论
2020-03-28
Twosee
专门起一个协程负责操作这个`pipeSocket` 用`channel`通信`channel->pop`, 拿到数据就调用`$socket->sendAll`发送, 而其它协程对这个`channel`操作就可以 这是正确的协程编程模式 socket资源是昂贵的, 而且本地IPC通信很快, 几乎相当于内存拷贝
赞
1
回复
2020-03-28
Reasno
回复
Twosee
1. 发现一个尴尬的情况。不止是协程共享这个socket,进程之间也是共享的。所以光靠channel还不行 还要加锁。。 2. 瓶颈不是IPC速度,而是我需要半双工的通讯,发送包给process以后要再从process收包,这中间如果只有一个socket,就相当于process处理包的并发只有1. 如果有10个socket,那么process的并发就可以达到10.
赞
0
回复
2020-05-10
Y js
回复
Twosee
我这边遇到这个问题,我用了channel来做数据交易,然后收到的地方进行对子进程发送消息,但消息有发送成功,但那边一直接收不了。但是在非协程就能收到 httpServer->onWorker->exportSocket发送到主进程-》主进程收到后,就把消息加到Channel里面。然后有一个协程去读取。收到后-》再把所有的子进程通过exportScoket发送,子进程一直收不到! 方便给点指导吗,这个问题较重要,但一直解决不了,痛苦中
赞
0
回复