Workerman 工作原理,如何实现连接不在同一个进程传递消息。

meows

Workerman 使用“Websocket”协议,开启两个子进程监听客户端连接。

描述:单机Workerman 开启4个worker子进程且开启端口复用,那么客户端连接的时候。每个客户端都有一个TcpConnection 对象实例,均保存在各自Worker 内存。

疑问一:如果来自多个websocket 客户端,但是他们的连接实例均不在同一进程。不在同一个Worker实例,那么是如何发送消息的嘛?

疑问二:Workerman Epoll write事件,在什么情况下会触发?
复杂的话,能否提供一篇靠谱的文章链接??

在此谢谢了~~-

1961 1 1
1个回答

blogdaren

1、跨进程通信使用官方的分布式channel组件:http://doc.workerman.net/components/channel.html
2、epoll的可写事件触发条件,简单理解就是:
LT模式:只要socket内核发送缓冲区未满,就会持续触发可写事件;
ET模式:当socket内核发送缓冲区未满时只会触发一次可写事件,只有发送缓冲区满并且再次变为未满时才会再次触发可写事件。

  • meows 2021-10-16

    你好,请问 workerman AsyncTcpConnection 类,$this->_socket = \stream_socket_client("tcp://127.0.0.1:8888"$errno, $errstr, 0, \STREAM_CLIENT_ASYNC_CONNECT, $context) ;STREAM_CLIENT_ASYNC_CONNECT 和 STREAM_CLIENT_CONNECT 区别是什么?

    谢谢!

  • meows 2021-10-16

    workerman epoll 应该就是使用的 LT模式嘛。

  • blogdaren 2021-10-16

    @7230: 此贴有回复: https://wenda.workerman.net/question/7471

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