1. 程式人生 > >使用Gateway-Worker實現多人分組實時聊天 結合第三方tp

使用Gateway-Worker實現多人分組實時聊天 結合第三方tp

geb wid 監聽 快速 多人 app 綁定 %20 發送數據

一、基礎知識
1、Workerman是一款純PHP開發的開源高性能的PHP socket 服務器框架。被廣泛的用於手機app、移動通訊等領域的開發。 支持TCP長連接,支持Websocket、HTTP等協議,支持自定義協議。擁有異步Mysql、異步Redis、異步Http、異步消息隊列等眾多高性能組件。
2、GatewayWorker基於Workerman開發的一個框架,支持多協議多端口監聽,支持分布式多機部署,用於快速開發長連接應用,例如移動通訊、物聯網、智能家居、遊戲服務端、聊天室等等。
3、gateClient是用來輔助 workerman或者是gateway進行用戶分組以及向用戶發送信息的組件,同時,能夠快速便捷的將原有系統的uid和clientid綁定起來。
官網:http://www.workerman.net/

二、基本理論
1、基本原則
現有mvc框架項目與GatewayWorker獨立部署互不幹擾
所有的業務邏輯都由網站頁面post/get到mvc框架中完成
GatewayWorker不接受客戶端發來的數據,即GatewayWorker不處理任何業務邏輯,GatewayWorker僅僅當做一個單向的推送通道
僅當mvc框架需要向瀏覽器主動推送數據時才在mvc框架中調用Gateway的APIGatewayClient完成推送
2、基本步驟
1、網站頁面建立與GatewayWorker的websocket連接
2、GatewayWorker發現有頁面發起連接時,將對應連接的client_id發給網站頁面
3、網站頁面收到client_id後觸發一個ajax請求(假設是bind.php)將client_id發到mvc後端
4、mvc後端bind.php收到client_id後利用GatewayClient調用Gateway::bindUid($client_id, $uid)將client_id與當前uid(用戶id或者客戶端唯一標識)綁定。如果有群組、群發功能,也可以利用Gateway::joinGroup($client_id, $group_id)將client_id加入到對應分組(重點 有了這個以後後面才能發消息之類的)
5、頁面發起的所有請求都直接post/get到mvc框架統一處理,包括發送消息(發消息自己自定義格式)
6、mvc框架處理業務過程中需要向某個uid或者某個群組發送數據時,直接調用GatewayClient的接口Gateway::sendToUid Gateway::sendToGroup 等發送即可

三、搭建gateway
1、下載gateway
http://www.workerman.net/download
2、配置events文件
在頁面發起連接時候,將對應連接的clent_id發給網站頁面。我們在此文件加上函數

技術分享

四、服務端的配置

1、綁定client_id 並加入分組
技術分享
在此方法中我們一定要把收到的client_id加入分組中,這裏簡單點前臺頁面直接設置room_id為1。
2、收發消息
技術分享

技術分享
之後我們就可以在這個方法裏面 進行我們的一些業務邏輯 接入我們的項目

3、前端頁面稍微修改下
技術分享

技術分享

使用Gateway-Worker實現多人分組實時聊天 結合第三方tp