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

简介

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

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

系统架构图

图片描述

时序图

如下Comet 层,Logic 层,Job层均可以灵活扩展机器github

图片描述

特性

  1. 分布式,可拓扑的架构
  2. 支持单个,房间推送
  3. 心跳支持(gorilla/websocket内置)
  4. 基于redis 作消息推送
  5. 轻量级
  6. 持续迭代...

部署

  1. 安装
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 包拉不下来的状况,例golang

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 拉下来,再移动位置web

git clone https://github.com/golang/net.git
mkdir -p golang.org/x/

mv net $GOPATH/src/golang.org/x/
  1. 部署im

安装comet、logic、job模块redis

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 &
  1. im_api 是im系统中使用的接口,须要像demo那样总体跑起来须要完整的部署

部署注意事项

  1. 部署服务器注意防火墙是否开放对应的端口(本地不须要,具体须要的端口在各层的配置文件)

demo

聊天室:http://www.texixi.com:1999/api

使用的包

  • log: github.com/sirupsen/logrus
  • rpc: github.com/smallnest/rpcx
  • websocket: github.com/gorilla/websocket
  • 配置文件:github.com/spf13/viper

后续计划

  1. 在线列表
  2. 支持wss
  3. 聊天机器人