前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于Netty实现的即时通讯

基于Netty实现的即时通讯

作者头像
BUG弄潮儿
发布2022-06-30 15:35:58
7450
发布2022-06-30 15:35:58
举报
文章被收录于专栏:JAVA乐园

Jelly是一款基于Netty4.x开发的TCP长连接即时通讯服务器端程序;并且提供了Java客户端API。

Github项目地址:https://github.com/Yohann-Codes/Jelly

功能包括

  • 账户:登录、注册、登出
  • 好友:添加、删除、好友在线状态
  • 消息:个人消息、讨论组消息(在线消息和离线消息)
  • 讨论组:创建和解散讨论组、添加和删除成员
  • 个人信息:修改个人信息、查看个人信息

Architecture

模块介绍

  • jelly-launcher   启动模块(就一个类而已)
  • jelly-transport   数据传输模块
  • jelly-serialization   序列化模块
  • jelly-service   服务模块
  • jelly-dao   数据访问模块

应用层协议

代码语言:javascript
复制
                                        Jelly Protocol    __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __
   |           |           |           |           |              |                          |         2           1           1           1            4               Uncertainty
   |__ __ __ __|__ __ __ __|__ __ __ __|__ __ __ __|__ __ __ __ __|__ __ __ __ __ __ __ __ __|
   |           |           |           |           |              |                          |
       Magic        Sign        Type       Status     Body Length         Body Content
   |__ __ __ __|__ __ __ __|__ __ __ __|__ __ __ __|__ __ __ __ __|__ __ __ __ __ __ __ __ __|
 
   协议头9个字节定长
       Magic      // 数据包的验证位,short类型
       Sign       // 消息标志,请求/响应/通知,byte类型
       Type       // 消息类型,登录/发送消息等,byte类型
       Status     // 响应状态,成功/失败,byte类型
       BodyLength // 协议体长度,int类型

数据交换格式:JSON(框架:Gson)

工作流程

代码语言:javascript
复制
              --------> Request        - - - - -> Response       -- -- --> Notice                    
---------------------------------------------------------------------------------------------------- 
                                                                                                     
                                                                                                     
                             __ __ __ __ __ __ __ __ __ __ __ __ __ __                               
                            |                  Server                 |                              
      __ __ __ __           |  __ __ __ __ __         __ __ __ __ __  |            __ __ __ __       
     |           | Request  | |              |       |              | |  Notice   |           |      
     |   Client  |--------> | | BlockingQueue| ----> |  ThreadPool  | | -- -- --> |   Client  |      
     |__ __ __ __|          | |__ __ __ __ __|       |__ __ __ __ __| |           |__ __ __ __|      
           |                |                                |        |                              
           |                |__ __ __ __ __ __ __ __ __ __ __|__ __ __|                              
           |                                                 |                                       
           |                    Response                     |                                       
            <- - - - - - - - - - - - - - - - - - - - - - - -                                         
                                                                                                     
                                                                                                     
---------------------------------------------------------------------------------------------------- 

其它说明

1. 登录成功后
  • 服务器端登录信息验证成功后生成Long类型的Token返回给客户端,此Token用于断线重连的验证信息
  • 开启心跳检测,客户端每空闲5s发送一个心跳包,服务器端每空闲6s计一次心跳失败
  • username和channel维护在一个Map集合中
2. 断线重连
  • 使用Token尝试重连一次
3. 讨论组信息
  • 为了减小内存压力,,在Server启动时会开启一个定时任务,每隔五分钟检查一次groupMap(保存讨论组信息的Map集合),最后一次活跃时刻过去超过10分钟的讨论组被从内存中remove掉;直到下一次活跃时刻才会被调入内存(活跃就是组员发消息)

客户端API

提供的都有API都是异步的,调用之后会返回一个Future,使用该Future添加相应的监听器来得到的服务器的响应结果。

API详细说明:https://github.com/Yohann-Codes/JellyAPI
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-06-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 BUG弄潮儿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Github项目地址:https://github.com/Yohann-Codes/Jelly
  • 功能包括
  • Architecture
    • 模块介绍
      • 应用层协议
        • 工作流程
          • 其它说明
            • 1. 登录成功后
            • 2. 断线重连
            • 3. 讨论组信息
          • 客户端API
            • API详细说明:https://github.com/Yohann-Codes/JellyAPI
        相关产品与服务
        即时通信 IM
        即时通信 IM(Instant Messaging)基于腾讯二十余年的 IM 技术积累,支持 Android、iOS、Mac、Windows、Web、H5、小程序平台且跨终端互通,低代码 UI 组件助您30分钟集成单聊、群聊、好友与资料、消息漫游、群组管理、会话管理、直播弹幕、内容审核和推送等能力。适用于直播互动、电商带货、客服咨询、社交沟通、企业办公、互动游戏、医疗健康等场景。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档