翼度科技»论坛 编程开发 PHP 查看内容

【workerman】uniapp+thinkPHP5使用GatewayWorker实现实时通讯

8

主题

8

帖子

24

积分

新手上路

Rank: 1

积分
24
前言

之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛,就离不开通讯了,然后我就想到了长连接。这里本人用的是GatewayWorker框架。
什么是GatewayWorker框架?

GatewayWorker是基于Workerman开发的一套TCP长连接的应用框架,实现了单发、群发、广播等接口,内置了mysql类库,GatewayWorker分为Gateway进程和Worker进程,支持分布式部署,能够支持大量的连接数。
GatewayWorker的工作原理

  1. 1、启动所有进程(GatewayWorker、business、register)
  2. 2、GatewayWorker和business进程启动后向register请求注册
  3. 3、register服务收到注册请求后,把所有Gateway的通讯地址保存在内存中同时把内存中所有的Gateway的通讯地址发给business
  4. 4、business进程得到所有的Gateway内部通讯地址后进行连接GatewayWorker
  5. 5、如果有新的GatewayWorker服务进行register,则将新的Gateway内部通讯地址列表将广播给所有buiness并建立连接
  6. 6、如果有GatewayWorker下线,则Register服务会收到通知,会将该GatewayWorker内部通讯地址删除,然后广播新的内部通讯地址列表给所有business
  7. 7、此时GatewayWorker与buiness已经建立起长连接
  8. 8、客户端的事件及接受的数据全部由GatewayWorker转发给business进行处理。
复制代码
目录结构
  1. ├── Applications // 项目应用目录
  2. │   └── YourAppGateway  // 建立一个存放workman的目录,名字随意
  3. │       ├── Events.php // 处理主逻辑业务的文件,管理onConnect onMessage onClose 等方法
  4. │       ├── start_gateway.php // gateway进程启动脚本、配置服务注册地址、端口号、进程数等参数
  5. │       ├── start_businessworker.php // 用户进程的启动脚本
  6. │       └── start_register.php // 注册服务的启动脚本
  7. ├── start.php // 全局启动脚本,此脚本会依次加载Applications/YourAppGateway/start*.php对所有脚本进行启动
  8. └── vendor    // GatewayWorker框架和Workerman框架源码目录
复制代码
GatewayWorker实现

以宝塔为例
1.安装composer

登录SSH终端,使用以下命令下载Composer的安装脚本:
  1. php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
复制代码
运行下面的命令来安装Composer:
  1. php composer-setup.php --install-dir=/usr/local/bin --filename=composer
复制代码
检查composer版本
  1. composer -v //检查composer版本
复制代码
2.安装workerman

在项目根目录打开宝塔终端,输入以下命令安装workman
  1. composer require topthink/think-worker
复制代码
3.安装GatewayWorker

在项目根目录打开宝塔终端,输入以下命令安装GatewayWorker
  1. composer require workerman/gateway-worker
复制代码
4.实现代码

可以选择官方提供的demo 链接:http://www.workerman.net/download/GatewayWorker.zip
或者使用我根据demo改编而来的
先在项目应用目录(一般是Applications)下新建一个文件存储以下四个进程文件
start_gateway.php
[code]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具