• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

nim: NIM项目是基于netty的实时消息推送系统,支持集群扩展、http消息发送、消息持久 ...

原作者: [db:作者] 来自: 网络 收藏 邀请

开源软件名称:

nim

开源软件地址:

https://gitee.com/Lihangjun/nim

开源软件介绍:

nim

实时消息推送服务

code style

码云地址:https://gitee.com/Lihangjun/nim.git

项目介绍

qq:1185192813邮箱:[email protected]

NIM项目是基于netty的实时消息推送系统,NIM已完成服务端1.0,其客户端web,Android,ios,flutter的SDK将在不久发布。目前NIM服务端使用springboot搭建,NIM主要具备如下特点:

  • 集群扩展:nim支持横向扩展,更具自身需要,可任意增加服务数量
  • http消息发送:客户端通过API接口发送消息,方便权限控制且通过发布服务接口与其它系统集成
  • 消息持久化:使用mongodb进行持久化(也可自己实现持久化),持久化推送消息以及用户组信息
  • 推送监听:暂支持双通道(redis 订阅/rocketMQ)监听消息,保证消息推送及时性与可达性,使用者也可扩展以及选择监听模式,默认使用redis 订阅消息
  • 多模式推送:支持广播,组播和单播模式
  • 管理与监控(暂未完成):提供对nim连接的监控与管理(包括集群环境),且支持消息管理与拦截发送

架构设计图


使用说明

  1. 根据自身环境修改配置文件application.yml。例如mongo,redis,rocketMQ的配置
  2. netty服务与web服务端口不同,使用者可修改server/xxxxServer.java文件中的port和path来指定连接路径
    @ServerEndpoint(port = "8181", path = "/v1/im/broadcast")
  3. 集群部署可结合nginx代理提供统一连接地址
  4. 消息格式说明:
UNICAST("单播", 1),MULTICAST("组播", 2),BROADCAST("广播", 3);
TEXT("文本", 1),IMAGE("图片", 2),VOICE("声音", 3),VIDEO("视频", 4);
AUTH("鉴权", 1),HANDSHAKE("握手", 2),HEARTBEAT("心跳", 3),EXIT("离线", 4),CLOSE("强制下线", 5),CHAT("聊天", 6);
/** * 消息标识id */private String messageId;/** * 消息时间戳 */private Long timestamp;/** * 来源用户id */private String fromUserId;/** * 目标用户id */private String toUserId;/** * 用户组id */private String toGroupId;/** * 数据类型 */private Integer mineType;/** * 聊天类型 */private Integer chatType;/** * 消息类型 */private Integer msgType;/** * 消息标志 */private String flag;/** * 消息内容 */private String content;/** * 携带数据 */private Object extras;

使用示例

design/wobsocket.html提供了web连接测试页面,连接成功后根据api接口发送消息。

  • 发送广播消息
请求地址:http://127.0.0.1:8080/api/v1/common/send请求头:Content-Type = application/json请求方法:POST请求参数:    {        "content": "hello,有人吗",        "extras": null    }
  • 发送组播消息
请求地址:http://127.0.0.1:8080/v1/im/send请求头:Content-Type = application/json请求方法:POST注意:fromUserId本应在用户鉴权信息中解析而得,这里为了方便测试,由使用者自己设置,如需要使用者可自己添加接口权限控制请求参数:    {        "fromUserId": "123456",        "content": "hello,有人吗",        "toGroupId": "11111",        "extras": null    }
  • 发送单播消息
请求地址:http://127.0.0.1:8080/v1/im/send请求头:Content-Type = application/json请求方法:POST注意:fromUserId本应在用户鉴权信息中解析而得,这里为了方便测试,由使用者自己设置,如需要使用者可自己添加接口权限控制。若消息发送目标有多个特定用户,可以逗号分隔多个用户id传参请求参数:    {        "fromUserId": "123456",        "content": "hello,有人吗",        "toUserId": "1111,2222,3333",        "extras": null    }
  • 获取netty服务连接信息
请求地址:http://127.0.0.1:8080/v1/api/count请求头:Content-Type = application/json请求方法:GET响应示例:{"flag":true,"code":2000,"message":"success","data":"广播用户数:0,单播用户数:0,组播用户数:0"}
  • 连接netty服务
广播连接地址:ws://192.168.1.21:8181/v1/im/broadcast广播连接示例:ws://192.168.1.21:8181/v1/im/broadcast组播连接地址:ws://192.168.1.21:8181/v1/im/multicast/{userId}/{groupId}组播连接示例:ws://192.168.1.21:8181/v1/im/multicast/123456/1111单播连接地址:ws://192.168.1.21:8181/v1/im/unicast/{userId}单播连接示例:ws://192.168.1.21:8181/v1/im/unicast/123456

下一步计划

  1. 发布SDK及其文档
  2. 提供netty服务监控
  3. 提供容器化一键部署脚本
  4. 增强可扩展性和灵活性
  5. 降低耦合性,提供独立的im中间件以及二次开发接口
  6. 提供更加灵活的配置,使用者根据自己选择组装im服务(多种持久化方案,多种监听通道,多种网络通信服务模式等)

开源许可协议

Apache License 2.0


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap