摘要:無法接收客戶端發(fā)來的數(shù)據(jù)。如果和在同一臺服務器上運行,則不用做任何更改,直接按照示例使用即可。
http://www.workerman.net/gate...
1.下載:界面如下圖:
根據(jù)自己的運行環(huán)境下載相應的版本:兩者除了啟動方式不一樣,其它文件都一樣
windows版本啟動方式:運行下載下來的GatewayWorker-for-winstart_for_win.bat批處理文件
Linux版本啟動方式:運行GatewayWorkerstart.php文件, // 全局啟動腳本,此腳本會依次加載Applications/項目/start_*.php啟動腳本
2.目錄結(jié)構(gòu):├── Applications // 這里是所有開發(fā)者應用項目 │ └── YourApp // 其中一個項目目錄,目錄名可以自定義 │ ├── Events.php // 開發(fā)者只需要關(guān)注這個文件 │ ├── start_gateway.php // gateway進程啟動腳本,包括端口號等設置 │ ├── start_businessworker.php // businessWorker進程啟動腳本 │ └── start_register.php // 注冊服務啟動腳本 │ ├── start.php // 全局啟動腳本,此腳本會依次加載Applications/項目/start_*.php啟動腳本 │ └── vendor // GatewayWorker框架和Workerman框架源碼目錄,此目錄開發(fā)者不用關(guān)心
提示:
1.客戶端的事件及數(shù)據(jù)全部由Gateway轉(zhuǎn)發(fā)給BusinessWorker處理,BusinessWorker默認調(diào)用Events.php中的onConnect onMessage onClose處理業(yè)務邏輯。
本地連接,類似邏輯代碼:
溝通中
2.通過GatewayClient發(fā)送的數(shù)據(jù)不會經(jīng)過Event.php,而是直接經(jīng)由Gateway進程轉(zhuǎn)發(fā)給客戶端。GatewayClient無法接收客戶端發(fā)來的數(shù)據(jù)。
示例代碼:
Gateway::$registerAddress = "127.0.0.1:1238"; $message = [ "type" => 4002, "clientId" => $clientId, "publish_time" => date("Y-m-d h:i:s", time()) ]; Gateway::bindUid($clientId,$uid); //在這里發(fā)送的信息是不走Event.php文件的,直接廣播出去了 Gateway::sendToClient($clientId,json_encode($message));
如果GatewayClient和GatewayWorker不是在同一臺服務器上,則需要先將start_gateway.php中的lanIp改成當前服務器的內(nèi)網(wǎng)ip(如果不在一個內(nèi)網(wǎng)可改成公網(wǎng)ip)。
如果GatewayClient和GatewayWorker在同一臺服務器上運行,則不用做任何更改,直接按照示例使用GatewayClient即可。
1.運行g(shù)ateway.php
2.start_gateway.php文件,這個文件是默認的文件,默認協(xié)議是text協(xié)議:
// gateway 進程,這里使用Text協(xié)議,可以用telnet測試 $gateway = new Gateway("Text://0.0.0.0:8282"); //想用js連接情況下: $gateway = new Gateway("ws://0.0.0.0:8282");
3.本地測試text協(xié)議是否正常命令,cmd運行:
telnet 127.0.0.1 8282
界面顯示:
4.重新打開一個窗口:window測試結(jié)果:
5.Linux 測試結(jié)構(gòu):
6.測試成功!
我們只要對這四個文件進行了解:
├── Applications // 這里是所有開發(fā)者應用項目 │ └── YourApp // 其中一個項目目錄,目錄名可以自定義 │ ├── Events.php // 開發(fā)者只需要關(guān)注這個文件 │ ├── start_gateway.php // gateway進程啟動腳本,包括端口號等設置 │ ├── start_businessworker.php // businessWorker進程啟動腳本 │ └── start_register.php // 注冊服務啟動腳本
1.修改start_gateway.php文件的這句配置,換成自己喜歡的協(xié)議與接口
// gateway 進程,這里使用Text協(xié)議,可以用telnet測試 $gateway = new Gateway("Websocket://0.0.0.0:7272");
2.修改Events.php 響應數(shù)據(jù)
//部分代碼 class Events { static $num = 0; /** * 當客戶端連接時觸發(fā)的事件。 * @param $client_id */ public static function onConnect($client_id) { global $num; Gateway::sendToClient($client_id, json_encode(array( "type" => "init", "msg" => $client_id ))); } /** * 有消息時 * @param int $client_id * @param mixed $message */ public static function onMessage($client_id, $message) { // 客戶端傳遞的是json數(shù)據(jù) $message_data = json_decode($message, true); if(!$message_data) { return ; } switch($message_data["type"]){ case "bind": $fromid = $message_data["fromid"]; Gateway::bindUid($client_id, $fromid); Gateway::sendToUid($message_data["fromid"],json_encode(["type"=>"bind","msg"=>"綁定成功"])); //返回給發(fā)送者 return; } //其它case 情況 } /** * 當用戶斷開連接時觸發(fā) * @param int $client_id 連接id */ public static function onClose($client_id) { // 向所有人發(fā)送 GateWay::sendToAll("$client_id logout "); } }
3. 在html中調(diào)用,觀察console的數(shù)據(jù)
溝通中
注意:注冊端口
文件:ApplicationsYourAppstart_register.php ApplicationsYourAppstart_gateway.php ApplicationsYourAppstart_businessworker.php
中的注冊地址要一樣
//start_register.php // 服務注冊地址 $gateway->registerAddress = "127.0.0.1:1238"; //start_businessworker.php // 服務注冊地址 $worker->registerAddress = "127.0.0.1:1238"; //start_register.php // register 必須是text協(xié)議 $register = new Register("text://0.0.0.0:1238");
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/31991.html
摘要:背景最近在一些項目需要用到實時推送給分組的用戶,前端需要傳輸給后端的信息比較少,通過多方考慮選擇了通過框架基于搭建微服務。擁有定時器異步客戶端異步異步異步異步消息隊列等眾多高性能組件。配合的定時器,也可以定時推送數(shù)據(jù)。 背景 最近在一些項目需要用到Websocket實時推送給分組的用戶,前端需要傳輸給后端的信息比較少,通過多方考慮選擇了通過GatewayWorker框架(基于Worke...
摘要:我們的平臺上有虛擬商品和實體商品兩大分類,當時也考慮到了消息的讀取狀態(tài)。商家發(fā)送時間是否已讀??辞岸舜a當前的所有代碼并不是最終的,目前只是階段性開發(fā),后期在項目中逐步完善。 前段時間公司提了一個新的需求,在商品的詳情頁要實現(xiàn)站內(nèi)買家和商品賣家實時通訊的功能以方便溝通促成交易,要開發(fā)此功能當時首先考慮到的就是swoole和workerman了,從網(wǎng)上大概了解了一下關(guān)于這兩款工具的闡述,...
摘要:我們的平臺上有虛擬商品和實體商品兩大分類,當時也考慮到了消息的讀取狀態(tài)。商家發(fā)送時間是否已讀??辞岸舜a當前的所有代碼并不是最終的,目前只是階段性開發(fā),后期在項目中逐步完善。 前段時間公司提了一個新的需求,在商品的詳情頁要實現(xiàn)站內(nèi)買家和商品賣家實時通訊的功能以方便溝通促成交易,要開發(fā)此功能當時首先考慮到的就是swoole和workerman了,從網(wǎng)上大概了解了一下關(guān)于這兩款工具的闡述,...
摘要:我們的平臺上有虛擬商品和實體商品兩大分類,當時也考慮到了消息的讀取狀態(tài)。商家發(fā)送時間是否已讀??辞岸舜a當前的所有代碼并不是最終的,目前只是階段性開發(fā),后期在項目中逐步完善。 前段時間公司提了一個新的需求,在商品的詳情頁要實現(xiàn)站內(nèi)買家和商品賣家實時通訊的功能以方便溝通促成交易,要開發(fā)此功能當時首先考慮到的就是swoole和workerman了,從網(wǎng)上大概了解了一下關(guān)于這兩款工具的闡述,...
摘要:我們的平臺上有虛擬商品和實體商品兩大分類,當時也考慮到了消息的讀取狀態(tài)。商家發(fā)送時間是否已讀??辞岸舜a當前的所有代碼并不是最終的,目前只是階段性開發(fā),后期在項目中逐步完善。 前段時間公司提了一個新的需求,在商品的詳情頁要實現(xiàn)站內(nèi)買家和商品賣家實時通訊的功能以方便溝通促成交易,要開發(fā)此功能當時首先考慮到的就是swoole和workerman了,從網(wǎng)上大概了解了一下關(guān)于這兩款工具的闡述,...
閱讀 3360·2023-04-26 01:40
閱讀 3062·2021-11-24 09:39
閱讀 1350·2021-10-27 14:19
閱讀 2623·2021-10-12 10:11
閱讀 1282·2021-09-26 09:47
閱讀 1823·2021-09-22 15:21
閱讀 2622·2021-09-06 15:00
閱讀 852·2021-08-10 09:44