本文介紹了一個 go 語言實現的簡單 im 即時通信系統。
簡介
純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 做消息推送
輕量級
持續迭代。。.
部署
-
安裝
goget-ugithub.com/Terry-Ye/im
mv$GOPATH/src/github.com/Terry-Ye/im$GOPATH/src/im
cd$GOPATH/src/im
goget./...
golang.org 包拉不下來的情況,例
packagegolang.org/x/net/ipv4:unrecognizedimportpath"golang.org/x/net/ipv4"(httpsfetch:Gethttps://golang.org/x/net/ipv4?go-get=1:dialtcp216.239.37.1i/otimeout)
從github 拉下來,再移動位置
gitclonehttps://github.com/golang/net.git
mkdir-pgolang.org/x/
mvnet$GOPATH/src/golang.org/x/
- 部署im
安裝comet、logic、job模塊
cd$GOPATH/src/im/comet
goinstall
cd../logic/
goinstall
cd../job
goinstall
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/
-
通信系統
+關注
關注
6文章
1210瀏覽量
53645 -
聊天機器人
+關注
關注
0文章
345瀏覽量
12464 -
go語言
+關注
關注
1文章
158瀏覽量
9147
原文標題:支持分布式的 go 實現即時通訊系統
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
PID控制算法的C語言實現:PID算法原理
華為云 Flexus X 實例云服務器部署即時通訊 IM 項目

基于FPGA實現圖像直方圖設計

即時通話軟件音頻傳輸質量測試方案

在學習go語言的過程踩過的坑
go語言如何解決并發問題

三十分鐘入門基礎Go Java小子版

如何用C語言實現高效查找(二分法)

關于go中接口類型的表示方法
Go語言中的函數、方法與接口詳解
學習筆記|如何用Go程序采集溫濕度傳感器數據

評論