Gateway 类的使用
文件位置:GatewayWorker/Gateway.php
Gateway 类用于初始化 Gateway 进程。Gateway 进程是暴露给客户端的让其连接的进程。所有客户端的请求都是由 Gateway 接收然后分发给 BusinessWorker 处理,同样 BusinessWorker 也会将要发给客户端的响应通过 Gateway 转发出去。
Gateway 类是基于基础的 Worker 开发的。可以给 Gateway 对象的 onWorkerStart、onWorkerStop、onConnect、onClose 设置回调函数,但是无法给设置 onMessage 回调。Gateway 的 onMessage 行为固定为将客户端数据转发给 BusinessWorker。
初始化
初始化 Gateway 进程类似下面的代码
$gateway = new Gateway('protocol://ip:port');
其中参数各参数含义如下:
protocol:
为应用层协议,目前支持的协议有 1、websocket 协议 2、text 协议 3、Frame 协议 4、自定义通讯协议 5、tcp,直接裸 tcp,不推荐,见通讯协议作用。
注意
:GatewayWorker 不支持监听 Http 协议。但是可以在业务中以客户端的形式通过 http 协议 (比如 curl) 访问远程服务器。
ip:
1、如果写 0.0.0.0 代表监听本机所有网卡,也就是内网、外网、本机都可以访问到
2、如果是 127.0.0.1,代表只能本机通过 127.0.0.1 访问,外网和内网都访问不到
3、如果是内网 ip 例如:192.168.10.11,代表只能通过 192.168.10.11 访问,也就是只能内网访问,本机 127.0.0.1 也访问不了(如果监听的 ip 不属于本机则会报错)
4、如果是外网 ip 例如 110.110.110.110,代表只能通过外网 ip 110.110.110.110 访问,内网和本机 127.0.0.1 都访问不了 (如果监听的 ip 不属于本机则会报错)
port:
端口不能大于 65535,请确认端口没有被其它程序占用,否则启动会报错。如果端口小于 1024,需要 root 权限运行 GatewayWorker 才能有权限监听,否则报错没有权限。
Gateway 类可以定制的内容
1、 协议
和 Worker 一样,在初始化 Gateway 对象时设置 Gateway 的协议,例如下面设置 Gateway 的通讯协议为 websocket
use \GatewayWorker\Gateway;
require_once './Workerman/Autoloader.php';
// 指定websocket协议
$gateway = new Gateway("websocket://0.0.0.0:8585");
...
2、name
和 Worker 一样,可以设置 Gateway 进程的名称,方便 status 命令中查看统计
3、count
和 Worker 一样,可以设置 Gateway 进程的数量,一般一台服务器设置 1-2 个足够,设置多了对性能有一定影响。
4、lanIp
lanIp 是 Gateway 所在服务器的内网 IP,默认填写 127.0.0.1 即可。多服务器分布式部署的时候需要填写真实的内网 ip,不能填写 127.0.0.1。注意:lanIp 只能填写真实 ip,不能填写域名或者其它字符串,无论如何都不能写 0.0.0.0 .
5、startPort
Gateway 进程启动后会监听一个本机端口,用来给 BusinessWorker 提供链接服务,然后 Gateway 与 BusinessWorker 之间就通过这个连接通讯。这里设置的是 Gateway 监听本机端口的起始端口。比如启动了 4 个 Gateway 进程,startPort 为 2000,则每个 Gateway 进程分别启动的本地端口一般为 2000、2001、2002、2003。
当本机有多个 Gateway/BusinessWorker 项目时,需要把每个项目的 startPort 设置成不同的段
6、registerAddress,注册服务地址,格式类似于 '127.0.0.1:1236'。如果是部署了多个 register 服务则格式是数组,类似 ['192.168.0.1:1236','192.168.0.2:1236']
7、心跳设置,具体说明见心跳一节
8、onWorkerStart
和 Worker 一样,可以设置 Gateway 进程启动后的回调函数,一般在这个回调里面初始化一些全局数据
9、onWorkerStop
和 Worker 一样,可以设置 Gateway 进程关闭的回调函数,一般在这个回调里面做数据清理或者保存数据工作
10、onConnect(比较少用到,开发者一般不用关注)
和 Worker 一样,可以设置 onConnect 回调,当有客户端连接上来时触发。与 Events::onConnect 的区别是 Events::onConnect 运行在 BusinessWorker 进程上。Gateway::onConnect 是运行在 Gateway 进程上,无法使用 \GatewayWorker\Lib\Gateway 类提供的接口
11、onClose(比较少用到,开发者一般不用关注)
和 Worker 一样,可以设置 onClose 回调,当有客户端连接关闭时触发。同样与 Events::onClose 的区别是 Gateway::onClose 是运行在 Gateway 进程上,无法使用 \GatewayWorker\Lib\Gateway 类提供的接口