我的理解,当worker->count大于1时,会启动多个进程处理客户端的连接。
假设当worker->count为2时,会启动worker1和worker2两个进程,
多个客户端连接上来时,假设为以下的场景:
worker1: A, B, C
worker2: D, E
当客户端A要给客户端D发消息时,A如何获得D的connection?
如果A和D是分别连到不同的进程上,那互相之间应该是无法直接通信的。
workerman是如何处理这样的问题的?
同样,当A想向所有客户端广播时,也有同样的问题。
求解答。
首先有很多方法可以做到进程间通讯。
一个简单做法是建立一个全局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
当然这个是一个比较方便的通讯模型,还有很多其它方法可以实现进程间的通讯
可以利用workerman的Channle组件来完成进程间/服务器间通讯
http://doc3.workerman.net/component/channel.html
连接打不开了。有没有案例?
http://doc.workerman.net/components/channel.html