專案結構
chatOfPomelo 是基於 Pomelo 框架的聊天室示例。服務端包含三類自定義服務:
配置 servers.json
development/production 環境下均配置三類服務的 id、host、port、clientPort、frontend 標識。
核心模塊代碼解析
queryEntry。驗證 uid,從應用獲取所有 connector 列表,返回第一個 connector 的 host 和 clientPort 給客戶端。(實際生產可做負載均衡)enter。構造 uid = username*rid,檢查重複登錄,綁定 session,設置 rid,通過 RPC 調用 chatRemote.add 將玩家加入頻道並獲取用戶列表返回。session 關閉時觸發 onUserLeave 通過 RPC 調用 chatRemote.kick 移除玩家。channelService。
add(uid, sid, name, flag, cb):獲取/創建頻道,推送 onAdd 通知現有成員,將玩家加入頻道,返回成員列表。get(name, flag):獲取頻道成員列表(去除 *rid 後綴)。kick(uid, sid, name):玩家離開頻道,推送 onLeave 通知。send。根據 msg.target 判斷廣播(channel.pushMessage)或私聊(channelService.pushMessageByUids)。網絡拓撲
客戶端 → gate(負載均衡) → connector(長連接維持) ↔ chat(邏輯處理)。chat 不直接連客戶端,所有下行消息經 connector 中轉。支持多 connector、多 chat 水平擴展。
總結
展示了 Pomelo 典型的「前端網關+連接層+後端邏輯」分層架構,利用 RPC 與 Channel 實現服務間解耦與消息路由,適合即時通訊類遊戲服務端開發。