php-GatewayWorker搭建即時聊天室

來源:互聯網
上載者:User

標籤:div   進程   htm   app   ase   源碼   com   0.12   伺服器   

├── 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");    // 服務端主動推送訊息時會觸發這裡的onmessage    ws.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
三、自訂一個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");    // 服務端主動推送訊息時會觸發這裡的onmessage    ws.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.php Gateway::bindUid($clientId,$uid); Gateway::sendToAll(json_encode($clientId));

:http://www.workerman.net/doc

php-GatewayWorker搭建即時聊天室

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.