支持分佈式的 go 實現即時通訊系統

簡介

純 go 實現的 im 即時通訊系統,各層可單獨部署,之間通過 rpc 通訊,支持集羣,github 地址 https://github.com/Terry-Ye/im_api , 學習於 goim, 總分三層,

  1. comet(用戶連接層),可以直接部署多個節點,每個節點保證 serverId 唯一,在配置文件 comet.toml

  2. logic(業務邏輯層),無狀態,各層通過 rpc 通訊,容易擴展,支持 http 接口來接收消息

  3. job(任務推送層)通過 redsi 訂閱發佈功能進行推送到 comet 層。

系統架構圖

時序圖

以下 Comet 層,Logic 層,Job 層都可以靈活擴展機器

特性

  1. 分佈式,可拓撲的架構

  2. 支持單個,房間推送

  3. 心跳支持(gorilla/websocket 內置)

  4. 基於 redis 做消息推送

  5. 輕量級

  6. 持續迭代...

部署

  1. 安裝
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/
  1. 部署 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 &
  1. im_api 是 im 系統中使用的接口,需要像 demo 那樣整體跑起來需要完整的部署

部署注意事項

  1. 部署服務器注意防火牆是否開放對應的端口 (本地不需要,具體需要的端口在各層的配置文件)

demo

聊天室:http://www.texixi.com:1999/

使用的包

後續計劃

  1. 在線列表

  2. 支持 wss

  3. 聊天機器人

轉自:

www.ancii.com/awugjp68e/

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/yhiKL55JBllj78nuLPHibA