由 golang 实现的 emsg 协议 server
原版的 emsg_server 是使用 erlang 编写的云服务平台,有版权问题,无法开源,所以 golang 重构一下为了学习与交流
任何人都可以无条件使用本服务,并可以为 sara 贡献代码,我会认真审核您提交的代码.
# 协议文档 https://github.com/emsg/docs/wikigolang 1.7+
rediscd /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/saraNAME:
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 versionNAME:
sara setup - 生成默认配置文件
USAGE:
sara setup [command options] [arguments...]
OPTIONS:
--out value, -o value 配置文件全路径 (default: "/etc/sara/conf.json")
| 参数 | 默认值 | 说明 | |
|---|---|---|---|
| port | 4222 | tcp 服务端口 | |
| wsport | 4224 | websocket 服务端口 | |
| tlsport | 4333 | tls 服务端口,单向认证 | |
| wssport | 4334 | wss 服务端口,与tls使用同一个证书 | |
| rpcport | 4280 | https://github.com/emsg/docs/wiki/RPC 功能接口 | |
| accesstoken | 调用RPC接口时提供的身份认证 | ||
| nodeid | n01 | 节点唯一标示,做集群时必须确保此属性唯一 | |
| dbaddr | localhost:6379 | redis地址,不启用 auth,支持单节点和 cluster | |
| dbpool | 100 | redis连接池大小 | |
| callback | https://github.com/emsg/docs/wiki/RPC 回调接口 | ||
| nodeaddr | localhost:4281 | 节点间通信地址,做集群部署时使用 | |
| logfile | /tmp/sara.log | 日志文件 | |
| loglevel | 3 | 0:ERROR,1:WRAN,2:INFO,3:DEBUG | |
| dc | dc01 | TODO:数据中心编号,跨数据中心部署 | |
| 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_tcp | true | true:提供tcp服务,false:不提供tcp服务 | |
| enable_tls | false | true:需要提供 keyfile 和 certfile,false:关闭 tls 服务 | |
| enable_ws | true | true:提供websocket服务,false:不提供ws服务 | |
| enable_wss | false | true:需要提供 keyfile 和 certfile,false:关闭 tls 服务 | |
| enable_auth | false | 开启认证,需要提供 callback 参数,并实现 auth 接口 | |
| enable_offline_callback | false | 开启离线消息回调,需要提供 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]
accesstoken : 没个节点的 token 都应当一致,否则节点间也无法通信;
nodeid : 集群中每个节点都有一个唯一的 id ,切记不能重复,建议按照 n01、n02、n03 这样编排;
nodeaddr : 节点间的通信地址 ,要确保设置的每个节点间的 ip、port 可以访问,注意防火墙配置;
dbaddr : 每个节点都要把 session 注册到这个 db 中,所以每个节点的此项配置应当是一致的;{
"accesstoken":"123456",
"nodeid":"n01",
"nodeaddr": "192.168.0.101:4281",
"dbaddr": "192.168.0.100:6379",
"dbpool":1000
}{
"accesstoken":"123456",
"nodeid":"n02",
"nodeaddr": "192.168.0.102:4281",
"dbaddr": "192.168.0.100:6379",
"dbpool":1000
}python sdk for test : https://github.com/emsg/emsg-sdk-py
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