使用 gatewayworkman 实现小蝌蚪聊天室

JerryXia 发表于 , 阅读 (2)

todo

对 todpolo 项目的前端不是特别理解, 10几个js文件, 什么时候兴趣来了再折腾一下.

workman 的一点理解

  1. 典型的 master - worker 设计, master负责进程管理, worker 负责具体业务(简单而言就是接受client的socket通信的)
  2. 传统php程序(大部分框架都是基于此)都是运行在 Apache/nginx 容器中, 即作为 http 应用, 不适用于 长连接 / 双向通信 场景, workman是php socket 框架, 支持各种常见协议, 并可以自定义协议.
  3. 常见协议: tcp / udp; http / websocket
  4. 自定义协议: 首部固定长度; 首部UInt32; 二进制文件上传; 文本协议( json + \n 结尾)

gatewayworker 的一点理解

  1. 进程模型: Gateway进程和Worker进程和register注册服务进程, gateway 负责网络IO, worker 负责业务处理, register 负责注册2者之前的通讯
  2. 实际就是对 workman 的封装, 将业务细化(模块化)了, 好处是可以分开部署各自负责, 更加灵活, 但是需要增加2者进程间的通信

todpole 项目结构分析

workspace/      新建一个目录作为工作目录    GatewayWorker/      gatewayworker 官方源码    Workerman/          workerman 官方源码    Todpolo/            todpolo项目根目录        web/                        前端目录        start_register.php          起 register 进程, 注册一个 文本协议 地址(ip+port) 用来通信        start_gateway.php           起 gateway 进程, 负责 client 的连接        start_web.php               起 web 进程, 用来作为 webserver        start_businessworker.php    起 worker 进程        Event.php                   server端的业务逻辑

可以看出来: server端轻松得不要不要的.

todpolo server端

server端极其简单: 前4个start_ 开头的脚本就是按照 gatewayworker 架构起进程, Event.php 里面才是业务逻辑, 这里只有 4 条(还包括了 client 的 connect + close)

todpolo client端

client端包括 web页面 + ws client 端通信 + 蝌蚪动画, 光看这十来个js文件, 任务量就不小, 具体参考我的 百度脑图