workerman多台gateway之间的通讯原理

2024-04-20 13:01:24 浏览数 (3)

Workerman 是一个基于 PHP 开发的高性能异步网络通信框架,其启动过程包括启动 Gateway 进程和 Worker 进程。Gateway 进程负责异步网络 IO,而 Worker 进程负责业务逻辑处理。多台 Gateway 之间的通讯原理以及 Workerman 的启动过程可以简述如下:

  1. Gateway 进程启动
    • 当 Workerman 启动时,会启动 Gateway 进程。每个 Gateway 进程都会向一个存储(如文件或 Memcache,可配置)写入该进程的内部通讯地址。
    • 写入的信息包括每个 Gateway 进程的内部通讯地址以及相关的信息,如 IP 地址、端口等。
  2. Worker 进程启动
    • Worker 进程启动时,会读取存储中的信息,获取每个 Gateway 进程的内部通讯地址。
    • Worker 进程会向每个 Gateway 进程的内部通讯地址建立长连接,确立与每个 Gateway 进程的通讯通道。
  3. 定时任务监测
    • Worker 进程中会有一个定时任务,定时监测存储中是否有新的 Gateway 内部通讯地址加入。
    • 如果有新的 Gateway 进程加入,Worker 进程会同样建立长连接,以便与新的 Gateway 进程进行通讯。
  4. 通讯原理
    • Gateway 和 Worker 之间的通讯是通过内部的长连接实现的。
    • 每个 Gateway 进程会与后端的所有 Worker 进程建立长连接,而每个 Worker 进程也会与所有的 Gateway 进程建立长连接。
    • 这样的设计保证了每个 Gateway 进程都知道有多少 Worker 进程,同时每个 Worker 进程也知道有哪些 Gateway 进程,从而实现了集群内部的通讯。
  5. 广播和单独发送
    • 广播是通过 Worker 进程调用 Gateway::sendToAll($message) 实现的,Worker 进程会向所有 Gateway 进程发送一条广播命令 数据,每个 Gateway 进程收到后再向其维护的所有客户端连接发送数据。
    • 单独发送是通过 Gateway::sendToClient($client_id, $message) 实现的,需要知道目标客户端的 client_id,然后通过存储获取到对应的 Gateway 内部通讯地址,最终向该地址发送命令 数据,实现对特定客户端的单独发送。

通过了解多台 Gateway 进程之间的通讯原理以及 Workerman 的启动过程,可以更好地理解其内部工作机制,并为系统的设计和优化提供参考。

0 人点赞