純golang im即時通訊系統(支持分佈式)

簡介

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

  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/

使用的包

  • log: github.com/sirupsen/logrus
  • rpc: github.com/smallnest/rpcx
  • websocket: github.com/gorilla/websocket
  • 配置文件:github.com/spf13/viper

後續計劃

  1. 在線列表
  2. 支持wss
  3. 聊天機器人
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章