本文介绍了一个 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文章
1325浏览量
55287 -
聊天机器人
+关注
关注
0文章
350浏览量
13126 -
go语言
+关注
关注
1文章
161浏览量
9879
原文标题:支持分布式的 go 实现即时通讯系统
文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
CIPOS™ Mini IM564-X6D/IM564-X6DS:助力高效电机驱动设计
CIPOS™ Tiny IM323-L6G/IM323-L6G2:助力电机控制的理想选择
基于IM3570/IM3533的汽车智能锁天线阻抗测量方案
无线生活,“蓝牙”相连——探索蓝牙技术的智能连接世界
连接数字的即时纽带
C语言实现PID算法介绍
无线生活,“蓝牙”相连——探索蓝牙技术的智能连接世界
socket是什么
常用Web 实时通信技术:原理+选型,一篇通关
即时通话软件音频传输质量测试方案介绍
智己IM5和IM6登陆英国市场
基于瑞芯微RK3562 的四核 AR M Cortex-A53 + 单核 ARM Cortex-M0工业评估板——MQTT通信方案
go语言实现的简单im即时通信系统
评论