入門指引
重要的事情說三遍
業(yè)務(wù)開發(fā)只需要關(guān)注 Applications/項目/Events.php一個文件即可。
業(yè)務(wù)開發(fā)只需要關(guān)注 Applications/項目/Events.php一個文件即可。
業(yè)務(wù)開發(fā)只需要關(guān)注 Applications/項目/Events.php一個文件即可。
開放的端口及協(xié)議在start_gateway.php中更改。參見Gateway類的使用一章。
注意
1、服務(wù)端啟動成功,但是無法通訊,請檢查服務(wù)器防火墻。
2、客戶端只能連接Gateway端口,不要連接Register端口。
3、客戶端與服務(wù)端要能保持正常通訊,需要保證客戶端與服務(wù)端的通訊協(xié)議是一致的。比如服務(wù)端是websocket協(xié)議,客戶端也要使用websocket協(xié)議才能通訊,否則無法通訊。
4、長連接應(yīng)用切記需要開啟應(yīng)用層心跳(GatewayWorker提供了設(shè)置,參加心跳檢測),心跳間隔20-30秒最佳,為了避免長連接因為長時間不通訊被節(jié)點防火墻斷開。
5、如果業(yè)務(wù)并發(fā)連接數(shù)超過1000同時在線,請務(wù)必優(yōu)化linux內(nèi)核,并安裝event擴展或者libevent擴展。
6、業(yè)務(wù)代碼更改后請運行 php start.php reload
更新代碼,否則更改的代碼不會生效。
目錄結(jié)構(gòu)
.
├── Applications // 這里是所有開發(fā)者應(yīng)用項目
│?? └── YourApp // 其中一個項目目錄,目錄名可以自定義
│?? ├── Events.php // 開發(fā)者只需要關(guān)注這個文件
│?? ├── start_gateway.php // gateway進程啟動腳本,包括端口號等設(shè)置
│?? ├── start_businessworker.php // businessWorker進程啟動腳本
│?? └── start_register.php // 注冊服務(wù)啟動腳本
│
├── start.php // 全局啟動腳本,此腳本會依次加載Applications/項目/start_*.php啟動腳本
│
└── vendor // GatewayWorker框架和Workerman框架源碼目錄,此目錄開發(fā)者不用關(guān)心
說明
一般來說開發(fā)者只需要關(guān)注Applications/YourApp/Events.php。因為所有業(yè)務(wù)代碼都在這里開始的。vendor目錄為框架目錄,開發(fā)者不要改動,也不用去理解。
其它start_gateway.php start_businessworker.php start_register.php分別是進程啟動腳本,開發(fā)者一般不需要改動這三個文件。三個腳本統(tǒng)一由根目錄的start.php啟動。
Events.php
例如下面是一個簡單的聊天室示例
<?php
use \GatewayWorker\Lib\Gateway;
class Events
{
/**
* 當客戶端連接時觸發(fā)
* 如果業(yè)務(wù)不需此回調(diào)可以刪除onConnect
* @param int $client_id 連接id
*/
public static function onConnect($client_id)
{
// 向當前client_id發(fā)送數(shù)據(jù)
Gateway::sendToClient($client_id, "Hello $client_id");
// 向所有人發(fā)送
Gateway::sendToAll("$client_id login");
}
/**
* 當客戶端發(fā)來消息時觸發(fā)
* @param int $client_id 連接id
* @param string $message 具體消息
*/
public static function onMessage($client_id, $message)
{
// 向所有人發(fā)送
Gateway::sendToAll("$client_id said $message");
}
/**
* 當用戶斷開連接時觸發(fā)
* @param int $client_id 連接id
*/
public static function onClose($client_id)
{
// 向所有人發(fā)送
GateWay::sendToAll("$client_id logout");
}
}
Events.php中定義5個事件回調(diào)方法,
- onWorkerStart businessWorker進程啟動事件(一般用不到)
- onConnect 連接事件(比較少用到)
- onMessage 消息事件(必用)
- onClose 連接斷開事件(比較常用到)
- onWorkerStop businessWorker進程退出事件(幾乎用不到)
5個回調(diào)接口說明參見 Events類的回調(diào)接口 一節(jié)
其中消息事件onMessage是必須的,其它事件回調(diào)可以不實現(xiàn)。
<?php
use \GatewayWorker\Lib\Gateway;
class Events
{
/**
* 當客戶端發(fā)來消息時觸發(fā)
* @param int $client_id 連接id
* @param string $message 具體消息
*/
public static function onMessage($client_id, $message)
{
// 向所有人發(fā)送
Gateway::sendToAll("$client_id said $message");
}
}
start_gateway.php
start_gateway.php為gateway進程啟動腳本,主要定義了客戶端連接的端口號、協(xié)議等信息,具體參見 Gateway類的使用一節(jié)。
客戶端連接的就是start_gateway.php中初始化的Gateway端口。
start_businessworker.php
start_businessworker.php為businessWorker進程啟動腳本,也即是調(diào)用Events.php的業(yè)務(wù)處理進程,具體參見 BusinessWorker類的使用一節(jié)。
start_register.php
start_register.php為注冊服務(wù)啟動腳本,用于協(xié)調(diào)GatewayWorker集群內(nèi)部Gateway與Worker的通信,參見Register類使用一節(jié)。
注意:客戶端不要連接Register服務(wù)端口,客戶端應(yīng)該連接Gateway端口