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

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

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

3、搭建gateway
一、下載gateway
http://www.workerman.net/download
二、配置events文件
在頁面發起鏈接時候,將對應鏈接的clent_id發給網站頁面。咱們在此文件加上函數web

2ERF~_MCP$1KUH@_JEJE9[F

4、服務端的配置ajax

一、綁定client_id 並加入分組
YERH0ISPX57)X`MA(PV~D4J
在此方法中咱們必定要把收到的client_id加入分組中,這裏簡單點前臺頁面直接設置room_id爲1。
二、收發消息
GVQES(JJ_)W}9)6ZG0@{LGGsql

)9FTQYB{~OVX3)VOFIM(A56
以後咱們就能夠在這個方法裏面 進行咱們的一些業務邏輯 接入咱們的項目後端

三、前端頁面稍微修改下
[8$QAE1M~SV0YGEBQBRPQ{G瀏覽器

]X)7I)Q]K5I1~222N86U40M

相關文章
相關標籤/搜索