前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >workerman多台gateway之间的通讯原理

workerman多台gateway之间的通讯原理

原创
作者头像
高久峰
发布2024-04-20 13:01:24
1270
发布2024-04-20 13:01:24
举报

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 的启动过程,可以更好地理解其内部工作机制,并为系统的设计和优化提供参考。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com