热门排行
简介
YUE-IM是使用java开发,基于netty,akka 实现的即时通讯服务。并且提供极简的api,极大的降低开发难度,方便使用者二次开发。
主要特点
1.支持websocket,tcp协议进行通信,消息类型代码,消息内容格式自定义
2.支持单机部署,集群部署
3.提供极简api,方便开发者二次开发
4.得益于akka提供的能力,集群模式只需要简单配置(依赖zookeeper,用于种子节点发现),支持自组建,集群间消息通信不依赖其他消息队列及其他中间件
5.支持同一账号,多终端连接,多终端同时接收消息
软件架构
系统选择基于使用netty作为接入服务器,主要是考虑netty作为java里最知名的网络服务器框架,性能,对多种协议的支持,以及开发资料都有保证
集群间通信: 系统集群间通信选择基于Akka来实现,即时通讯集群要解决的最大的问题就是如何把消息投递到目的客户端连接的节点上,目前大部分开源的即时通讯项目基本上都是基于消息队列或者redis的发布订阅来实现跨节点的通信, 或者是维护一个总的路由缓存系统来实现跨节点的通信,本系统基于Akka,通过广播,消息应答及各节点缓存路由来实现集群各节点的通信,不依赖其他系统或中间件,尽量减少不必要的设备资源消耗及网络传输次数, Akka是一套开源工具和运行时,便于构建JVM上的并发应用和分布式应用,自从了解Akka后就一直想基于Akka开发 一个程序,无奈平时并没有什么应用场景用得到,Akka本身的特性是很适合做这种消息服务的,所以选择了Akka,并且集群节点间通信使用protobuf,提高数据传输效率
代码结构
├── imui #示例项目前端测试demo
├── yueim-common # 接口定义,通用配置,依赖
├── push-sample # 示例项目:即时通讯服务器节点,需部署启动
├── push-server # 即时通讯服务框架,依赖
默认协议结构
tcp连接:
websocket连接 websocket连接协议实现的比较简单,走的文本帧
消息类型代码 + "#" + json文本消息体
使用说明
yueim-sample : 本地启动ImApplication,访问imui下的index.html页面即可使用demo,完整项目开发完成后放到其他仓库
示例项目完成了 私聊,群聊,(多媒体,历史消息属于业务范畴,需要自行实现)
安装教程
1.参考yueim-node 项目的pom.xml配置,运行package命令后,打包出相应的tar.gz
2.解压xxx.tar.gz
3.根据相应的操作系统,运行bin目录下的相应的启动脚本