摘要:即時通訊中,最重要的是響應速度,我們需要展示消息列表那么這時會有未讀消息,未讀數量,最后一條消息內容,時間等等。目前設計是單表單庫。這里只是對即時通訊設計上做了一些簡要的闡述,如有疑問和建議,請在評論區回復。
詳解即時通訊設計實現(PHP+GatewayWorker+Redis) 需要實現的功能
一對一聊天(私聊)
一對多聊天(群聊)
類似QQ,微信等聊天列表 實時消息 顯示
工具選擇
GatewayWorker 有如下特性(更多請參考官網手冊)
基于Workerman開發
基于Gateway、Worker進程模型
支持分布式部署
支持高并發
支持全局廣播或者向任意客戶端推送數據
支持各種應用層協議
多協議支持
支持對象或者資源永久保持
高性能
方便與其它項目集成
支持長連接
我們主要使用它的WebSocket通訊協議,并且此框架非常方便的與 ThinkPHP,laravel 等框架結合使用,GatewayWorker可獨立部署,php負責相關的業務邏輯
Redis 鍵值操作,集合列表等。
即時通訊中,最重要的是響應速度,我們需要展示 “消息列表” 那么這時會有 未讀消息,未讀數量,最后一條消息內容,時間等等。websocket與GatewayWorker 原理使用 將不再敘述,不懂的童鞋 請上度娘 效果展示
群聊|私聊效果圖
消息列表效果圖
數據庫設計(群聊,私聊 分開) 私聊設計(簡要設計)參數名 | 說明 |
---|---|
id | 主鍵 |
sender_id | 發送者id |
receive_id | 接收者id |
chat_identify | 標識 :a與b聊天,b與a聊天。記錄 a-b |
message_details | 消息內容 |
last_time_at | 聊天時間間隔 超過一定時間時記錄 |
chat_identify 字段用處,這個字段是為了更方便的查找 a,b 之間的聊天記錄。
last_time_at QQ,微信聊天記錄之間,隔一段時間會有 時間 記錄,并不顯示每一條聊天記錄的時間
群聊(簡要設計)與私聊很像,只不過接收者id,變成 group_id 群組id。
消息列表設計,希望看到的效果是 “私聊,群聊”等都在一個列表展示,并且數據實時發生變化。這里借助Redis
每個用戶的列表都是一個集合 key = message_list:user_id
Redis集合存儲 消息類型 1私信,2群聊 message_list:user_id{ json_encode(["消息類型","接收者id|群組id"]), json_encode(["消息類型","接收者id|群組id"]), json_encode(["消息類型","接收者id|群組id"]), } 查找每個人的消息列表,直接取出該列表即可,但每個成員 都要對應 ‘未讀消息數量’,‘最后一條消息內容’,‘最后一條小時時間’。由于是可變的,所以需要多帶帶存儲 Redis 鍵值 key = message_content:user_id_消息類型_id key =>json_encode(["消息數量","最后一條消息內容","時間"]) 上面 集合列表里的每一個成員都 對應這里的每個鍵值。
消息更新都要操作Redis,相應的更新內容。
速度上 毋庸置疑,redis 相當的迅速。
需要后續優化的地方
私聊|群聊 記錄表。目前設計是單表單庫。顯然,隨著用戶量增加,必然爆棚。影響查詢的響應速度。
(解決方案無非:分庫分表,轉移備份歷史記錄)
GatewayWorker 通訊框架,是單服務器部署,不能支持太高的并發。
這里只是對 即時通訊 設計上做了一些簡要的闡述,如有疑問和建議,請在評論區回復。文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/28161.html
摘要:即時通訊中,最重要的是響應速度,我們需要展示消息列表那么這時會有未讀消息,未讀數量,最后一條消息內容,時間等等。目前設計是單表單庫。這里只是對即時通訊設計上做了一些簡要的闡述,如有疑問和建議,請在評論區回復。 詳解即時通訊設計實現(PHP+GatewayWorker+Redis) 需要實現的功能 一對一聊天(私聊) 一對多聊天(群聊) 類似QQ,微信等聊天列表 實時消息 顯示 工具...
摘要:即時通訊中,最重要的是響應速度,我們需要展示消息列表那么這時會有未讀消息,未讀數量,最后一條消息內容,時間等等。目前設計是單表單庫。這里只是對即時通訊設計上做了一些簡要的闡述,如有疑問和建議,請在評論區回復。 詳解即時通訊設計實現(PHP+GatewayWorker+Redis) 需要實現的功能 一對一聊天(私聊) 一對多聊天(群聊) 類似QQ,微信等聊天列表 實時消息 顯示 工具...
摘要:顯示實時刷新的內容頁面。存儲文本數據。更新插入數據。首先呢,要有發送請求并顯示遞歸調用先執行一次然后通過和關聯起來。是一個空文件,你只需要用記事本,新建一個,用來存放表單提交過去的數據,也就是說,其實就是一個數據庫。 也不多,就4個文件。ajax.html - 顯示實時刷新的內容頁面。chat.php - 處理數據。data.dat - 存儲文本數據。update.php - 更新/插...
閱讀 2526·2021-11-15 11:38
閱讀 2890·2021-11-02 14:44
閱讀 3827·2021-09-26 10:13
閱讀 3064·2021-08-13 15:02
閱讀 783·2019-08-30 15:56
閱讀 1458·2019-08-30 15:53
閱讀 2365·2019-08-30 13:01
閱讀 3238·2019-08-29 12:57