开源一个单节点10W+的即时通讯集群解决方案,附带一个示例项目
Github
集群: https://github.com/sumory/gru 示例项目:https://github.com/sumory/gru-example
先上图
-
示例项目是一个IM应用,基于Node.js和socket.io(协议实现由Gru提供),截图:
私聊:
群聊:
- 集群状态监控,该模块使用Node.js实现
介绍
其实集群的主要实现是基于Java的,也用了大量的中间件,node.js实现了监控和示例项目,但稍微上点规模的项目都不是一个门语言能cover的,所以有兴趣的同学还是可以看下这个项目的。详情见Github,大致介绍如下:
Gru
Gru是一个长连接服务解决方案,可用于各种类型的实时交互应用。
- 采用socket.io协议
- 各模块均支持水平扩展
- 单节点可服务10W+以上长连接,具体为在不断发消息的情况下(1000条/秒),单长连接服务节点支持的稳定连接数量在10W+(8核16G)
Gru-example
gru-example基于Gru的示例项目,即时应用最典型的代表就是IM,这个示例是一个基于Gru的web聊天应用。 安装
- 需首先配置好Gru集群
- 集群配置详见Gru文档
- 若不需要集群,Gru项目只需要部署一个模块(spear)即可
- 本示例是一个Node.js项目,需先安装Node.js
- clone下本示例
- npm install相关依赖
- 配置文件在config目录下,特别注意spearNode配置,此配置为一个可用的spear节点
- 运行node app.js,默认会加载config/dev.js配置文件
其它
- 这个项目的前身是我原来的一个开源项目,后来用于公司内部某系统,就关了Github。最近抽空剥离了一些业务代码,内部实现改得更为通用后重新开放出来,支持点对点和广播消息。
- 由于Gru是按照集群设计的,所以架构上分了好几个模块,但若是对于十万级别的长连接来说,单纯一个长连接节点(Gru的长连接服务模块叫spear,详见代码目录下的spear目录)即可支持。感兴趣的同学可拿spear自行改造。
- gru-example提供了一个如何使用gru构建实时应用的示例,若要二次开发,集成用户系统进来,可在类似于gru-example的模块中实现。
最后,欢迎star和fork.
5 回复
有个疑问啊, 集群为啥大部分是java写的呢?
@i5ting 也有很多其他语言写的啊,这个就另一个话题了,见仁见智。Java的优势是生态比较好,企业级的解决方案也比较多。
@sumory 我还是了解Java的,我疑问的是这部分nodejs也一样写,为什么没有用node
多语言,如果不是面向服务就会很麻烦
@i5ting 有好几个原因:
- node写的话要处理的边界条件比较多,尤其是稳定性方面
- 做了集群的话,用了很多第三方的中间件,比如zk、redis、分布式rpc、mq等,java的支持更好一些
- 当时公司的技术栈主要是java,全部node的话,无人维护
补充了最小化部署的文档,https://github.com/sumory/gru 只需要启动一个Java进程和gru-example的nodejs程序,即可体验。