支持分布式的 go 實(shí)現(xiàn)即時(shí)通訊系統(tǒng)


本文介紹了一個(gè) go 語言實(shí)現(xiàn)的簡(jiǎn)單 im 即時(shí)通信系統(tǒng)。
簡(jiǎn)介
純go實(shí)現(xiàn)的im即時(shí)通訊系統(tǒng),各層可單獨(dú)部署,之間通過rpc通訊,支持集群,github地址 https://github.com/Terry-Ye/im_api , 學(xué)習(xí)于goim, 總分三層,
comet(用戶連接層),可以直接部署多個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)保證serverId 唯一,在配置文件comet.toml logic(業(yè)務(wù)邏輯層),無狀態(tài),各層通過rpc通訊,容易擴(kuò)展,支持http接口來接收消息 job(任務(wù)推送層)通過redsi 訂閱發(fā)布功能進(jìn)行推送到comet層。
系統(tǒng)架構(gòu)圖
時(shí)序圖
以下Comet 層,Logic 層,Job層都可以靈活擴(kuò)展機(jī)器

特性
分布式,可拓?fù)涞募軜?gòu) 支持單個(gè),房間推送 心跳支持(gorilla/websocket內(nèi)置) 基于redis 做消息推送 輕量級(jí) 持續(xù)迭代...
部署
安裝
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 拉下來,再移動(dòng)位置
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系統(tǒng)中使用的接口,需要像demo那樣整體跑起來需要完整的部署
部署注意事項(xiàng)
部署服務(wù)器注意防火墻是否開放對(duì)應(yīng)的端口(本地不需要,具體需要的端口在各層的配置文件)
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
后續(xù)計(jì)劃
在線列表 支持wss 聊天機(jī)器人
原文來自:www.ancii.com/awugjp68e/
文章轉(zhuǎn)載:Go開發(fā)大全
(版權(quán)歸原作者所有,侵刪)
![]()

點(diǎn)擊下方“閱讀原文”查看更多
評(píng)論
圖片
表情
