worker->count大于1时,客户端之间怎样通信?

knightmade

我的理解,当worker->count大于1时,会启动多个进程处理客户端的连接。
假设当worker->count为2时,会启动worker1和worker2两个进程,
多个客户端连接上来时,假设为以下的场景:

worker1: A, B, C
worker2: D, E

当客户端A要给客户端D发消息时,A如何获得D的connection?
如果A和D是分别连到不同的进程上,那互相之间应该是无法直接通信的。
workerman是如何处理这样的问题的?

同样,当A想向所有客户端广播时,也有同样的问题。

求解答。

5899 2 0
2个回答

walkor

首先有很多方法可以做到进程间通讯。

一个简单做法是建立一个全局worker_global进程,worker1 worker2 ...在onWorkerStart时连接这个worker_global进程,当客户端A要给客户端D发消息时,worker1发现当前进程没有D客户端的connection,则给worker_global进程发消息,让worker_global进程将消息转发给worker2,然后再由worker2发给客户端D

这样可以做到所有的worker进程互通,向某个客户端发送消息或者广播消息就非常容易了,而且可以做到分布式部署,可以通过简单的增加服务器增大系统承载用户数

这里有个之前写的例子(没有经过测试)可以参考下,https://github.com/walkor/Pusher

当然这个是一个比较方便的通讯模型,还有很多其它方法可以实现进程间的通讯

  • 暂无评论
walkor

可以利用workerman的Channle组件来完成进程间/服务器间通讯

http://doc3.workerman.net/component/channel.html

年代过于久远,无法发表回答
🔝