日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

WebSocket实战之————GatewayWorker使用笔记例子

發布時間:2023/12/19 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WebSocket实战之————GatewayWorker使用笔记例子 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?參考文檔:http://www.workerman.net/gatewaydoc/

目錄結構

├── Applications // 這里是所有開發者應用項目 │ └── YourApp // 其中一個項目目錄,目錄名可以自定義 │ ├── Events.php // 開發者只需要關注這個文件 │ ├── start_gateway.php // gateway進程啟動腳本,包括端口號等設置 │ ├── start_businessworker.php // businessWorker進程啟動腳本 │ └── start_register.php // 注冊服務啟動腳本 │ ├── start.php // 全局啟動腳本,此腳本會依次加載Applications/項目/start_*.php啟動腳本 │ └── vendor // GatewayWorker框架和Workerman框架源碼目錄,此目錄開發者不用關心

!!!特別注意:

[1]客戶端的事件及數據全部由Gateway轉發給BusinessWorker處理,BusinessWorker默認調用Events.php中的onConnect onMessage onClose處理業務邏輯。

<script language="javascript" type="text/javascript">var $URL = "__APP__/Home/GatewayWorker/bindUid";// 與GatewayWorker建立websocket連接,域名和端口改為你實際的域名端口ws = new WebSocket("ws://127.0.0.1:8384");// 服務端主動推送消息時會觸發這里的onmessagews.onmessage = function(e){// json數據轉換成js對象var data = eval("("+e.data+")");var type = data.type || '';switch(type){// Events.php中返回的init類型的消息,將client_id發給后臺進行uid綁定case 'init':// 利用jquery發起ajax請求,將client_id發給后端進行uid綁定$.post($URL, {client_id: data.clientId}, function(data){}, 'json');break;default :alert(e.data);}}; </script>

[2]通過GatewayClient發送的數據不會經過Event.php,而是直接經由Gateway進程轉發給客戶端。GatewayClient無法接收客戶端發來的數據。

Gateway::$registerAddress = '127.0.0.1:1236'; $message = ['type' => 4002,'clientId' => $clientId,'publish_time' => date('Y-m-d h:i:s', time())]; Gateway::bindUid($clientId,$uid); //在這里發送的信息是不走Event.php文件的,直接廣播出去了 Gateway::sendToClient($clientId,json_encode($message));

如果GatewayClient和GatewayWorker不是在同一臺服務器上,則需要先將start_gateway.php中的lanIp改成當前服務器的內網ip(如果不在一個內網可改成公網ip)。
如果GatewayClient和GatewayWorker在同一臺服務器上運行,則不用做任何更改,直接按照示例使用GatewayClient即可。

一、start_gateway.php文件,這個文件是默認的文件,默認協議是text協議:

// gateway 進程,這里使用Text協議,可以用telnet測試 $gateway = new Gateway("Text://0.0.0.0:8383");

本地測試text協議是否正常命令:

telnet 127.0.0.1 8383

二、測試結果,啟動服務器

輸入命令:

telnet 127.0.0.1 8282

重新打開一個窗口:Windows 測試結果:

Linux測試結果:

測試成功:

三、自定義一個Websocket連接

例如:copy一個start_gateway_ws.php文件,如圖所示:

修改文件內容:

// gateway_ws 進程 $gateway_ws = new Gateway("Websocket://0.0.0.0:8384"); // gateway名稱,status方便查看 $gateway_ws->name = 'YourAppGatewayWS';

在HTMl頁面調用:

<script language="javascript" type="text/javascript">var $URL = "__APP__/Home/GatewayWorker/bindUid";console.log($URL);// 與GatewayWorker建立websocket連接,域名和端口改為你實際的域名端口ws = new WebSocket("ws://127.0.0.1:8384");// 服務端主動推送消息時會觸發這里的onmessagews.onmessage = function(e){// json數據轉換成js對象var data = eval("("+e.data+")");var type = data.type || '';switch(type){case 'init':$.post($URL,$data,success,'json');break;default :alert(e.data);}};</script>

四、start_businessworker.php文件

注意:以上的HTML頁面的WebSocket的端口號必須的同時對應哦!

// 服務注冊地址 $worker->registerAddress = '你的外網IP地址:1236';

可以看出:start_register.php這個文件是專門管理其他的三個文件的

注意:一下的register和worker的這個注冊地址必須是一樣的,也就是說,worker的注冊地址必須和register的一樣的

// register 服務必須是text協議 $register = new Register('text://0.0.0.0:1236'); // 服務注冊地址 $worker->registerAddress = '120.120.120.120:1236';

?例如在TP的Controller中使用的時候這樣連接:調用的是這個文件中的地址(服務注冊地址):start_businessworker.php

Gateway::$registerAddress = '120.120.120.120:1236'; //這個鏈接的地址是start_register.phpGateway::bindUid($clientId,$uid);Gateway::sendToAll(json_encode($clientId));

?

總結

以上是生活随笔為你收集整理的WebSocket实战之————GatewayWorker使用笔记例子的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。