入门指引
重要的事情说三遍
业务开发只需要关注 Applications / 项目 / Events.php 一个文件即可。 业务开发只需要关注 Applications / 项目 / Events.php 一个文件即可。 业务开发只需要关注 Applications / 项目 / Events.php 一个文件即可。
开放的端口及协议在 start_gateway.php 中更改。参见 Gateway 类的使用一章。
注意
1、服务端启动成功,但是无法通讯,请检查服务器防火墙。
2、客户端只能连接 Gateway 端口,不要连接 Register 端口。
3、客户端与服务端要能保持正常通讯,需要保证客户端与服务端的通讯协议是一致的。比如服务端是 websocket 协议,客户端也要使用 websocket 协议才能通讯,否则无法通讯。
4、长连接应用切记需要开启应用层心跳 (GatewayWorker 提供了设置,参加心跳检测),心跳间隔 20-30 秒最佳,为了避免长连接因为长时间不通讯被节点防火墙断开。
5、如果业务并发连接数超过 1000 同时在线,请务必优化 linux 内核,并安装 event 扩展或者 libevent 扩展。
6、业务代码更改后请运行 php start.php reload
更新代码,否则更改的代码不会生效。
目录结构
.
├── Applications // 这里是所有开发者应用项目
│ └── YourApp // 其中一个项目目录,目录名可以自定义
│ ├── Events.php // 开发者只需要关注这个文件
│ ├── start_gateway.php // gateway进程启动脚本,包括端口号等设置
│ ├── start_businessworker.php // businessWorker进程启动脚本
│ └── start_register.php // 注册服务启动脚本
│
├── start.php // 全局启动脚本,此脚本会依次加载Applications/项目/start_*.php启动脚本
│
└── vendor // GatewayWorker框架和Workerman框架源码目录,此目录开发者不用关心
说明
一般来说开发者只需要关注 Applications/YourApp/Events.php。因为所有业务代码都在这里开始的。vendor 目录为框架目录,开发者不要改动,也不用去理解。
其它 start_gateway.php start_businessworker.php start_register.php 分别是进程启动脚本,开发者一般不需要改动这三个文件。三个脚本统一由根目录的 start.php 启动。
Events.php
例如下面是一个简单的聊天室示例
<?php
use \GatewayWorker\Lib\Gateway;
class Events
{
/**
* 当客户端连接时触发
* 如果业务不需此回调可以删除onConnect
* @param int $client_id 连接id
*/
public static function onConnect($client_id)
{
// 向当前client_id发送数据
Gateway::sendToClient($client_id, "Hello $client_id");
// 向所有人发送
Gateway::sendToAll("$client_id login");
}
/**
* 当客户端发来消息时触发
* @param int $client_id 连接id
* @param string $message 具体消息
*/
public static function onMessage($client_id, $message)
{
// 向所有人发送
Gateway::sendToAll("$client_id said $message");
}
/**
* 当用户断开连接时触发
* @param int $client_id 连接id
*/
public static function onClose($client_id)
{
// 向所有人发送
GateWay::sendToAll("$client_id logout");
}
}
Events.php 中定义 5 个事件回调方法,
- onWorkerStart businessWorker 进程启动事件(一般用不到)
- onConnect 连接事件 (比较少用到)
- onMessage 消息事件 (必用)
- onClose 连接断开事件 (比较常用到)
- onWorkerStop businessWorker 进程退出事件(几乎用不到)
5 个回调接口说明参见 Events 类的回调接口 一节
其中消息事件 onMessage 是必须的,其它事件回调可以不实现。
<?php
use \GatewayWorker\Lib\Gateway;
class Events
{
/**
* 当客户端发来消息时触发
* @param int $client_id 连接id
* @param string $message 具体消息
*/
public static function onMessage($client_id, $message)
{
// 向所有人发送
Gateway::sendToAll("$client_id said $message");
}
}
start_gateway.php
start_gateway.php 为 gateway 进程启动脚本,主要定义了客户端连接的端口号、协议等信息,具体参见 Gateway 类的使用一节。
客户端连接的就是 start_gateway.php 中初始化的 Gateway 端口。
start_businessworker.php
start_businessworker.php 为 businessWorker 进程启动脚本,也即是调用 Events.php 的业务处理进程,具体参见 BusinessWorker 类的使用一节。
start_register.php
start_register.php 为注册服务启动脚本,用于协调 GatewayWorker 集群内部 Gateway 与 Worker 的通信,参见 Register 类使用一节。
注意:客户端不要连接Register服务端口,客户端应该连接Gateway端口