純golang編寫的分布式可伸縮IM服務器:FishChatServer

bgn4 9年前發布 | 86K 次閱讀 電話/通訊/IM聊天 FishChatServer

FishChatServer

FishChat(魚傳 -魚傳尺素) - FishChat是一款優秀的即時通訊軟件(IM), 它集合了市面上已有產品的優點, 并具備智能硬件網關管理(學習QQ物聯思想, 構思中).

NOTE: 魚傳取自古樂府《飲馬長城窟行》客從遠方來, 遺我雙鯉魚. 呼兒烹鯉魚, 中有尺素書.

FishChat Android客戶端見 https://github.com/oikomi/FishChatAndroid (緊張開發中)

Status

It is not usable yet and still under early development.

Todo

  • support p2p communication
  • support group communication
  • support message encryption
  • support file transfer
  • support audio
  • support video

系統架構

純golang編寫的分布式可伸縮IM服務器:FishChatServer

關鍵服務器詳解

gateway

gateway server主要是接受client請求,進行通用的功能設置,目前這塊只做了分配msg_server的功能,后面可根據需要進行擴展

在gateway server的配置文件中最重要的是配置msg_server列表

"MsgServerList"      : [
        "192.168.159.169:19000",
        "192.168.159.169:19001"
    ],

msg_server

msg_server是消息的主體,維護著客戶端連接和keeplive,同時要注意router、manager和monitor都訂閱了msg_server的channel

SYSCTRL_CLIENT_STATUS = "/sysctrl/client-status"
    SYSCTRL_TOPIC_STATUS  = "/sysctrl/topic-status"
    SYSCTRL_TOPIC_SYNC    = "/sysctrl/topic-sync"
    SYSCTRL_SEND          = "/sysctrl/send"
    SYSCTRL_MONITOR       = "/sysctrl/monitor"

這些channel保證了msg_server在事件觸發時會廣播通知后面的router、manager和monitor服務

router

router顧名思義是做了msg_server之間的消息轉發

manager

manager主要是管理client信息存儲、離線消息存儲等等,通過它和redis聯系

monitor

monitor主要是收集監控各服務器狀態信息,目前monitor是可選項,可按需要啟動它

部署

FishChatServer采用分布式可伸縮部署方式。如果沒有多機條件,可以單機部署:

建議: 單機測試部署

  • gateway一臺
  • msg_server兩臺
  • router一臺
  • manager一臺
  • monitor一臺

NOTE: FishChatServer依賴redis,請先啟動redis,讓它監聽在默認端口

NOTE: 可以通過修改各文件夾下面的json配置文件配置服務器參數

./gateway

./msg_server -conf_file=msg_server.19001.json

./msg_server -conf_file=msg_server.19000.json

./router

./manager

./monitor

按上面的默認啟動方式,查看系統的監聽端口如下 純golang編寫的分布式可伸縮IM服務器:FishChatServer

當然你可以修改各文件夾下面的json配置文件修改配置參數

NOTE: router、manager和monitor一定要在msg_server啟動之后啟動,因為他們都訂閱了msg_server的channel

技術細節

FishChatServer完全采用Golang開發(https://golang.org/)

音視頻方案

音視頻采用nginx-rtmp架構,借助ffmpeg技術,客戶端輸出rtmp流,服務器輸出hls流

協議

1. client to MsgServer

syntax: SEND_PING_CMD

format: SEND_CLIENT_ID

syntax: SEND_CLIENT_ID_CMD

format: SEND_CLIENT_ID ID


項目主頁:
http://www.baiduhome.net/lib/view/home/1430833980320

 本文由用戶 bgn4 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!