本文介绍了一个 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文章
1205浏览量
53529 -
聊天机器人
+关注
关注
0文章
345浏览量
12398 -
go语言
+关注
关注
1文章
158浏览量
9104
原文标题:支持分布式的 go 实现即时通讯系统
文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
华为云 Flexus X 实例云服务器部署即时通讯 IM 项目
![华为云 Flexus X 实例云服务器部署<b class='flag-5'>即时通</b>讯 <b class='flag-5'>IM</b> 项目](https://file1.elecfans.com//web3/M00/03/D4/wKgZO2dsEg2AL_33AAM8H-msDKY084.png)
基于FPGA实现图像直方图设计
![基于FPGA<b class='flag-5'>实现</b>图像直方图设计](https://file1.elecfans.com/web3/M00/03/90/wKgZO2dqHAGARj8XAAAkNh_VJCs585.png)
即时通话软件音频传输质量测试方案
![<b class='flag-5'>即时通</b>话软件音频传输质量测试方案](https://file1.elecfans.com/web3/M00/00/DB/wKgZPGdOpeeAYKc7AAH6Y4hdnWs570.png)
在学习go语言的过程踩过的坑
go语言如何解决并发问题
![<b class='flag-5'>go</b><b class='flag-5'>语言</b>如何解决并发问题](https://file1.elecfans.com/web2/M00/0A/04/wKgZomcYjBqACG7nAAAPq1sqxcQ121.png)
三十分钟入门基础Go Java小子版
![三十分钟入门基础<b class='flag-5'>Go</b> Java小子版](https://file1.elecfans.com//web2/M00/02/EE/wKgaoma5rIOAYKpLAAQ04GlurC8295.png)
如何用C语言实现高效查找(二分法)
![如何用C<b class='flag-5'>语言实现</b>高效查找(二分法)](https://file.elecfans.com/web2/M00/9B/3D/poYBAGQjnauAVXOgAABFcEbXdEE684.png)
关于go中接口类型的表示方法
Go语言中的函数、方法与接口详解
学习笔记|如何用Go程序采集温湿度传感器数据
![学习笔记|如何用<b class='flag-5'>Go</b>程序采集温湿度传感器数据](https://file1.elecfans.com/web2/M00/C6/27/wKgaomX7rXuAQXiYAABkh0KgXto909.png)
GitHub Copilot+ESP开发实战-串口
![GitHub Copilot+ESP开发实战-串口](https://file.elecfans.com/web2/M00/45/DA/poYBAGKPGziABtawAAAYlXODTds073.jpg)
评论