本文介紹了一個(gè) go 語言實(shí)現(xiàn)的簡單 im 即時(shí)通信系統(tǒng)。
簡介
純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 做消息推送
輕量級
持續(xù)迭代。。.
部署
-
安裝
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系統(tǒng)中使用的接口,需要像demo那樣整體跑起來需要完整的部署
部署注意事項(xiàng)
- 部署服務(wù)器注意防火墻是否開放對應(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/
-
通信系統(tǒng)
+關(guān)注
關(guān)注
6文章
1205瀏覽量
53491 -
聊天機(jī)器人
+關(guān)注
關(guān)注
0文章
344瀏覽量
12378 -
go語言
+關(guān)注
關(guān)注
1文章
158瀏覽量
9094
原文標(biāo)題:支持分布式的 go 實(shí)現(xiàn)即時(shí)通訊系統(tǒng)
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
華為云 Flexus X 實(shí)例云服務(wù)器部署即時(shí)通訊 IM 項(xiàng)目
![華為云 Flexus X 實(shí)例云服務(wù)器部署<b class='flag-5'>即時(shí)通</b>訊 <b class='flag-5'>IM</b> 項(xiàng)目](https://file1.elecfans.com//web3/M00/03/D4/wKgZO2dsEg2AL_33AAM8H-msDKY084.png)
基于FPGA實(shí)現(xiàn)圖像直方圖設(shè)計(jì)
![基于FPGA<b class='flag-5'>實(shí)現(xiàn)</b>圖像直方圖設(shè)計(jì)](https://file1.elecfans.com/web3/M00/03/90/wKgZO2dqHAGARj8XAAAkNh_VJCs585.png)
即時(shí)通話軟件音頻傳輸質(zhì)量測試方案
![<b class='flag-5'>即時(shí)通</b>話軟件音頻傳輸質(zhì)量測試方案](https://file1.elecfans.com/web3/M00/00/DB/wKgZPGdOpeeAYKc7AAH6Y4hdnWs570.png)
在學(xué)習(xí)go語言的過程踩過的坑
使用C語言實(shí)現(xiàn)函數(shù)模板
go語言如何解決并發(fā)問題
![<b class='flag-5'>go</b><b class='flag-5'>語言</b>如何解決并發(fā)問題](https://file1.elecfans.com/web2/M00/0A/04/wKgZomcYjBqACG7nAAAPq1sqxcQ121.png)
三十分鐘入門基礎(chǔ)Go Java小子版
![三十分鐘入門基礎(chǔ)<b class='flag-5'>Go</b> Java小子版](https://file1.elecfans.com//web2/M00/02/EE/wKgaoma5rIOAYKpLAAQ04GlurC8295.png)
如何用C語言實(shí)現(xiàn)高效查找(二分法)
![如何用C<b class='flag-5'>語言實(shí)現(xiàn)</b>高效查找(二分法)](https://file.elecfans.com/web2/M00/9B/3D/poYBAGQjnauAVXOgAABFcEbXdEE684.png)
HarmonyOS開發(fā)案例:【W(wǎng)eb組件實(shí)戰(zhàn)】
![HarmonyOS開發(fā)案例:【W(wǎng)eb組件實(shí)戰(zhàn)】](https://file1.elecfans.com/web2/M00/DE/3B/wKgZomYuFkqAXCgfAAebePqB9CU245.jpg)
關(guān)于go中接口類型的表示方法
Go語言中的函數(shù)、方法與接口詳解
C語言實(shí)現(xiàn)Web參數(shù)傳遞
學(xué)習(xí)筆記|如何用Go程序采集溫濕度傳感器數(shù)據(jù)
![學(xué)習(xí)筆記|如何用<b class='flag-5'>Go</b>程序采集溫濕度傳感器數(shù)據(jù)](https://file1.elecfans.com/web2/M00/C6/27/wKgaomX7rXuAQXiYAABkh0KgXto909.png)
GitHub Copilot+ESP開發(fā)實(shí)戰(zhàn)-串口
![GitHub Copilot+ESP開發(fā)實(shí)戰(zhàn)-串口](https://file.elecfans.com/web2/M00/45/DA/poYBAGKPGziABtawAAAYlXODTds073.jpg)
評論