支持分佈式的 go 實現即時通訊系統
簡介
純 go 實現的 im 即時通訊系統,各層可單獨部署,之間通過 rpc 通訊,支持集羣,github 地址 https://github.com/Terry-Ye/im_api , 學習於 goim, 總分三層,
-
comet(用戶連接層),可以直接部署多個節點,每個節點保證 serverId 唯一,在配置文件 comet.toml
-
logic(業務邏輯層),無狀態,各層通過 rpc 通訊,容易擴展,支持 http 接口來接收消息
-
job(任務推送層)通過 redsi 訂閱發佈功能進行推送到 comet 層。
系統架構圖
時序圖
以下 Comet 層,Logic 層,Job 層都可以靈活擴展機器
特性
-
分佈式,可拓撲的架構
-
支持單個,房間推送
-
心跳支持(gorilla/websocket 內置)
-
基於 redis 做消息推送
-
輕量級
-
持續迭代...
部署
-
安裝
go get -u github.com/Terry-Ye/im
mv $GOPATH/src/github.com/Terry-Ye/im $GOPATH/src/im
cd $GOPATH/src/im
go get ./...
golang.org 包拉不下來的情況,例
package golang.org/x/net/ipv4: unrecognized import path "golang.org/x/net/ipv4" (https fetch: Get https://golang.org/x/net/ipv4?go-get=1: dial tcp 216.239.37.1:443: i/o timeout)
從 github 拉下來,再移動位置
git clone https://github.com/golang/net.git
mkdir -p golang.org/x/
mv net $GOPATH/src/golang.org/x/
- 部署 im
安裝 comet、logic、job 模塊
cd $GOPATH/src/im/comet
go install
cd ../logic/
go install
cd ../job
go install
nohup $GOPATH/bin/logic -d $GOPATH/src/im/logic/ 2>&1 > /data/log/im/logic.log &
nohup $GOPATH/bin/comet -d $GOPATH/src/im/comet/ 2>&1 > /data/log/im/comet.log &
nohup $GOPATH/bin/job -d $GOPATH/src/im/job/ 2>&1 > /data/log/im/job.log &
- im_api 是 im 系統中使用的接口,需要像 demo 那樣整體跑起來需要完整的部署
部署注意事項
- 部署服務器注意防火牆是否開放對應的端口 (本地不需要,具體需要的端口在各層的配置文件)
demo
聊天室:http://www.texixi.com:1999/
使用的包
-
log: github.com/sirupsen/logrus
-
rpc: github.com/smallnest/rpcx
-
websocket: github.com/gorilla/websocket
-
配置文件:github.com/spf13/viper
後續計劃
-
在線列表
-
支持 wss
-
聊天機器人
轉自:
www.ancii.com/awugjp68e/
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/yhiKL55JBllj78nuLPHibA