乐趣区

纯golang im即时通讯系统(支持分布式)

简介
纯 go 实现的 im 即时通讯系统,各层可单独部署,之间通过 rpc 通讯,支持集群,github 地址 https://github.com/Terry-Ye/im, 学习于 goim, 总分三层,

comet(用户连接层),可以直接部署多个节点,每个节点保证 serverId 唯一,在配置文件 comet.toml
logic(业务逻辑层),无状态,各层通过 rpc 通讯,容易扩展,支持 http 接口来接收消息
job(任务推送层)通过 redsi 订阅发布功能进行推送到 comet 层。

时序图
以下 Comet 层,Logic 层,Job 层都可以灵活扩展机器

特性

分布式,可拓扑的架构
支持单个,房间推送
心跳支持(gorilla/websocket 内置)
基于 redis 做消息推送
轻量级
持续迭代 …

部署
安装
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/
部署 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 &

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
聊天机器人

退出移动版