摘要:無法接收客戶端發(fā)來的數(shù)據(jù)。如果和在同一臺(tái)服務(wù)器上運(yùn)行,則不用做任何更改,直接按照示例使用即可。
http://www.workerman.net/gate...
1.下載:界面如下圖:
根據(jù)自己的運(yùn)行環(huán)境下載相應(yīng)的版本:兩者除了啟動(dòng)方式不一樣,其它文件都一樣
windows版本啟動(dòng)方式:運(yùn)行下載下來的GatewayWorker-for-winstart_for_win.bat批處理文件
Linux版本啟動(dòng)方式:運(yùn)行GatewayWorkerstart.php文件, // 全局啟動(dòng)腳本,此腳本會(huì)依次加載Applications/項(xiàng)目/start_*.php啟動(dòng)腳本
2.目錄結(jié)構(gòu):├── Applications // 這里是所有開發(fā)者應(yīng)用項(xiàng)目 │ └── YourApp // 其中一個(gè)項(xiàng)目目錄,目錄名可以自定義 │ ├── Events.php // 開發(fā)者只需要關(guān)注這個(gè)文件 │ ├── start_gateway.php // gateway進(jìn)程啟動(dòng)腳本,包括端口號(hào)等設(shè)置 │ ├── start_businessworker.php // businessWorker進(jìn)程啟動(dòng)腳本 │ └── start_register.php // 注冊服務(wù)啟動(dòng)腳本 │ ├── start.php // 全局啟動(dòng)腳本,此腳本會(huì)依次加載Applications/項(xiàng)目/start_*.php啟動(dòng)腳本 │ └── vendor // GatewayWorker框架和Workerman框架源碼目錄,此目錄開發(fā)者不用關(guān)心
提示:
1.客戶端的事件及數(shù)據(jù)全部由Gateway轉(zhuǎn)發(fā)給BusinessWorker處理,BusinessWorker默認(rèn)調(diào)用Events.php中的onConnect onMessage onClose處理業(yè)務(wù)邏輯。
本地連接,類似邏輯代碼:
溝通中
2.通過GatewayClient發(fā)送的數(shù)據(jù)不會(huì)經(jīng)過Event.php,而是直接經(jīng)由Gateway進(jìn)程轉(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不是在同一臺(tái)服務(wù)器上,則需要先將start_gateway.php中的lanIp改成當(dāng)前服務(wù)器的內(nèi)網(wǎng)ip(如果不在一個(gè)內(nèi)網(wǎng)可改成公網(wǎng)ip)。
如果GatewayClient和GatewayWorker在同一臺(tái)服務(wù)器上運(yùn)行,則不用做任何更改,直接按照示例使用GatewayClient即可。
1.運(yùn)行g(shù)ateway.php
2.start_gateway.php文件,這個(gè)文件是默認(rèn)的文件,默認(rèn)協(xié)議是text協(xié)議:
// gateway 進(jìn)程,這里使用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運(yùn)行:
telnet 127.0.0.1 8282
界面顯示:
4.重新打開一個(gè)窗口:window測試結(jié)果:
5.Linux 測試結(jié)構(gòu):
6.測試成功!
我們只要對這四個(gè)文件進(jìn)行了解:
├── Applications // 這里是所有開發(fā)者應(yīng)用項(xiàng)目 │ └── YourApp // 其中一個(gè)項(xiàng)目目錄,目錄名可以自定義 │ ├── Events.php // 開發(fā)者只需要關(guān)注這個(gè)文件 │ ├── start_gateway.php // gateway進(jìn)程啟動(dòng)腳本,包括端口號(hào)等設(shè)置 │ ├── start_businessworker.php // businessWorker進(jìn)程啟動(dòng)腳本 │ └── start_register.php // 注冊服務(wù)啟動(dòng)腳本
1.修改start_gateway.php文件的這句配置,換成自己喜歡的協(xié)議與接口
// gateway 進(jìn)程,這里使用Text協(xié)議,可以用telnet測試 $gateway = new Gateway("Websocket://0.0.0.0:7272");
2.修改Events.php 響應(yīng)數(shù)據(jù)
//部分代碼 class Events { static $num = 0; /** * 當(dāng)客戶端連接時(shí)觸發(fā)的事件。 * @param $client_id */ public static function onConnect($client_id) { global $num; Gateway::sendToClient($client_id, json_encode(array( "type" => "init", "msg" => $client_id ))); } /** * 有消息時(shí) * @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; } //其它c(diǎn)ase 情況 } /** * 當(dāng)用戶斷開連接時(shí)觸發(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 // 服務(wù)注冊地址 $gateway->registerAddress = "127.0.0.1:1238"; //start_businessworker.php // 服務(wù)注冊地址 $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://specialneedsforspecialkids.com/yun/31991.html
摘要:背景最近在一些項(xiàng)目需要用到實(shí)時(shí)推送給分組的用戶,前端需要傳輸給后端的信息比較少,通過多方考慮選擇了通過框架基于搭建微服務(wù)。擁有定時(shí)器異步客戶端異步異步異步異步消息隊(duì)列等眾多高性能組件。配合的定時(shí)器,也可以定時(shí)推送數(shù)據(jù)。 背景 最近在一些項(xiàng)目需要用到Websocket實(shí)時(shí)推送給分組的用戶,前端需要傳輸給后端的信息比較少,通過多方考慮選擇了通過GatewayWorker框架(基于Worke...
摘要:我們的平臺(tái)上有虛擬商品和實(shí)體商品兩大分類,當(dāng)時(shí)也考慮到了消息的讀取狀態(tài)。商家發(fā)送時(shí)間是否已讀。看前端代碼當(dāng)前的所有代碼并不是最終的,目前只是階段性開發(fā),后期在項(xiàng)目中逐步完善。 前段時(shí)間公司提了一個(gè)新的需求,在商品的詳情頁要實(shí)現(xiàn)站內(nèi)買家和商品賣家實(shí)時(shí)通訊的功能以方便溝通促成交易,要開發(fā)此功能當(dāng)時(shí)首先考慮到的就是swoole和workerman了,從網(wǎng)上大概了解了一下關(guān)于這兩款工具的闡述,...
摘要:我們的平臺(tái)上有虛擬商品和實(shí)體商品兩大分類,當(dāng)時(shí)也考慮到了消息的讀取狀態(tài)。商家發(fā)送時(shí)間是否已讀。看前端代碼當(dāng)前的所有代碼并不是最終的,目前只是階段性開發(fā),后期在項(xiàng)目中逐步完善。 前段時(shí)間公司提了一個(gè)新的需求,在商品的詳情頁要實(shí)現(xiàn)站內(nèi)買家和商品賣家實(shí)時(shí)通訊的功能以方便溝通促成交易,要開發(fā)此功能當(dāng)時(shí)首先考慮到的就是swoole和workerman了,從網(wǎng)上大概了解了一下關(guān)于這兩款工具的闡述,...
摘要:我們的平臺(tái)上有虛擬商品和實(shí)體商品兩大分類,當(dāng)時(shí)也考慮到了消息的讀取狀態(tài)。商家發(fā)送時(shí)間是否已讀。看前端代碼當(dāng)前的所有代碼并不是最終的,目前只是階段性開發(fā),后期在項(xiàng)目中逐步完善。 前段時(shí)間公司提了一個(gè)新的需求,在商品的詳情頁要實(shí)現(xiàn)站內(nèi)買家和商品賣家實(shí)時(shí)通訊的功能以方便溝通促成交易,要開發(fā)此功能當(dāng)時(shí)首先考慮到的就是swoole和workerman了,從網(wǎng)上大概了解了一下關(guān)于這兩款工具的闡述,...
摘要:我們的平臺(tái)上有虛擬商品和實(shí)體商品兩大分類,當(dāng)時(shí)也考慮到了消息的讀取狀態(tài)。商家發(fā)送時(shí)間是否已讀。看前端代碼當(dāng)前的所有代碼并不是最終的,目前只是階段性開發(fā),后期在項(xiàng)目中逐步完善。 前段時(shí)間公司提了一個(gè)新的需求,在商品的詳情頁要實(shí)現(xiàn)站內(nèi)買家和商品賣家實(shí)時(shí)通訊的功能以方便溝通促成交易,要開發(fā)此功能當(dāng)時(shí)首先考慮到的就是swoole和workerman了,從網(wǎng)上大概了解了一下關(guān)于這兩款工具的闡述,...
閱讀 3372·2023-04-26 01:40
閱讀 3079·2021-11-24 09:39
閱讀 1393·2021-10-27 14:19
閱讀 2637·2021-10-12 10:11
閱讀 1297·2021-09-26 09:47
閱讀 1839·2021-09-22 15:21
閱讀 2677·2021-09-06 15:00
閱讀 878·2021-08-10 09:44