Skip to content

emsg/sara

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

66 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

sara

由 golang 实现的 emsg 协议 server

原版的 emsg_server 是使用 erlang 编写的云服务平台,有版权问题,无法开源,所以 golang 重构一下为了学习与交流

任何人都可以无条件使用本服务,并可以为 sara 贡献代码,我会认真审核您提交的代码.

# 协议文档 https://github.com/emsg/docs/wiki

安装与使用 (linux/macOs)

环境依赖

golang 1.7+
redis

编译

假设 GOPATH 在 /opt/gopath 目录, golang 1.7+
cd /opt/gopath/src
git clone https://github.com/emsg/sara.git
cd /opt/gopath
go install sara
# 应当确保 /usr/local/bin 在 PATH 中
sudo ln -s /usr/local/bin/sara /opt/gopath/bin/sara

运行

sara -h
NAME:
   sara - SARA IM Server

USAGE:
   sara [global options] command [command options] [arguments...]

VERSION:
   0.0.1

AUTHOR(S):
   liangc <cc14514@icloud.com>

COMMANDS:
     version
     stop     停止服务,尽量避免直接 kill 服务
     setup    生成默认配置文件
     help, h  Shows a list of commands or help for one command

   benchmark:
     makeconn  创建指定个数的连接,测试最大连接数

   debug:
     pprof  将 cpu/mem/block 信息写入文件

GLOBAL OPTIONS:
   --debug                   write 'pprof' info to /tmp/sara_cpu.out and /tmp/sara_mem.out
   --config value, -c value  set config path  (default: "/etc/sara/conf.json")
   --help, -h                show help
   --version, -v             show current version
sara setup -h
NAME:
   sara setup - 生成默认配置文件

USAGE:
   sara setup [command options] [arguments...]

OPTIONS:
   --out value, -o value  配置文件全路径 (default: "/etc/sara/conf.json")
配置说明 : /etc/sara/conf.json
参数默认值说明
port4222tcp 服务端口
wsport4224websocket 服务端口
tlsport4333tls 服务端口,单向认证
wssport4334wss 服务端口,与tls使用同一个证书
rpcport4280https://github.com/emsg/docs/wiki/RPC 功能接口
accesstoken调用RPC接口时提供的身份认证
nodeidn01节点唯一标示,做集群时必须确保此属性唯一
dbaddrlocalhost:6379redis地址,不启用 auth,支持单节点和 cluster
dbpool100redis连接池大小
callbackhttps://github.com/emsg/docs/wiki/RPC 回调接口
nodeaddrlocalhost:4281节点间通信地址,做集群部署时使用
logfile/tmp/sara.log日志文件
loglevel30:ERROR,1:WRAN,2:INFO,3:DEBUG
dcdc01TODO:数据中心编号,跨数据中心部署
keyfile/etc/sara/server.key私钥: openssl genrsa -out server.key 2048
certfile/etc/sara/server.pem证书: openssl req -new -x509 -key server.key -out server.pem -days 3650
enable_tcptruetrue:提供tcp服务,false:不提供tcp服务
enable_tlsfalsetrue:需要提供 keyfile 和 certfile,false:关闭 tls 服务
enable_wstruetrue:提供websocket服务,false:不提供ws服务
enable_wssfalsetrue:需要提供 keyfile 和 certfile,false:关闭 tls 服务
enable_authfalse开启认证,需要提供 callback 参数,并实现 auth 接口
enable_offline_callbackfalse开启离线消息回调,需要提供 callback 参数,并实现 offline 接口
启动服务
#> sara 
[16:19:58 CST 2017/02/10] [INFO] (sara/saradb.(*SaraDatabase).wbfConsumer:110) write buffer started ; total consume [40]
[16:19:58 CST 2017/02/10] [INFO] (sara/node.(*Node).cleanGhostSession:353) register node : n01
[16:19:58 CST 2017/02/10] [INFO] (sara/sararpc.(*RPCServer).Start:47) RPCServer listener on  [localhost:4281]
[16:19:58 CST 2017/02/10] [INFO] (sara/node.(*Node).cleanGhostSession:355) 🔪  👻  clean ghost session
[16:19:58 CST 2017/02/10] [INFO] (sara/service.StartRPC:28) http-rpc start on [0.0.0.0:4280]
[16:19:58 CST 2017/02/10] [INFO] (sara/node.(*Node).StartTCP:79) tcp start on [0.0.0.0:4222]
[16:19:58 CST 2017/02/10] [INFO] (sara/node.(*Node).StartWS:70) ws start on [4224]
[16:19:58 CST 2017/02/10] [INFO] (sara/node.(*Node).StartTLS:136) tls start on [0.0.0.0:4333]
[16:19:58 CST 2017/02/10] [INFO] (sara/node.(*Node).StartWSS:113) wss start on [0.0.0.0:4334]
在后台运行: nohup sara > /tmp/sara.log &

集群

有关集群的配置项
accesstoken : 没个节点的 token 都应当一致,否则节点间也无法通信;
nodeid : 集群中每个节点都有一个唯一的 id ,切记不能重复,建议按照 n01、n02、n03 这样编排;
nodeaddr : 节点间的通信地址 ,要确保设置的每个节点间的 ip、port 可以访问,注意防火墙配置;
dbaddr : 每个节点都要把 session 注册到这个 db 中,所以每个节点的此项配置应当是一致的;
两个节点的集群配置样例
redis start on 192.168.0.100:6379
192.168.0.101
{
    "accesstoken":"123456",
    "nodeid":"n01",
    "nodeaddr": "192.168.0.101:4281",
    "dbaddr": "192.168.0.100:6379",
    "dbpool":1000
}
192.168.0.102
{
    "accesstoken":"123456",
    "nodeid":"n02",
    "nodeaddr": "192.168.0.102:4281",
    "dbaddr": "192.168.0.100:6379",
    "dbpool":1000
}
分别启动两个节点
并用 sdk 测试代码分别连接两个节点,并互相通信
git clone https://github.com/emsg/emsg-sdk-py
cd emsg-sdk-py

# 分别在两个终端窗口执行如下脚本,并在终端输入文本按回车发送
python EmsgClient.py 192.168.0.101:4222 1@a.a 2@a.a 
python EmsgClient.py 192.168.0.102:4222 2@a.a 1@a.a

About

由 golang 实现的 emsg 协议 server

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors