资讯专栏INFORMATION COLUMN

基于Netty实现的即时通讯

edagarli / 3617人阅读

Jelly Jelly是一款基于Netty4.x开发的TCP长连接即时通讯服务器端程序;并且提供了Java客户端API。 Github项目地址:Jelly 功能包括

账户:登录、注册、登出

好友:添加、删除、好友在线状态

消息:个人消息、讨论组消息(在线消息和离线消息)

讨论组:创建和解散讨论组、添加和删除成员

个人信息:修改个人信息、查看个人信息

Architecture 模块介绍

jelly-launcher   启动模块(就一个类而已)

jelly-transport   数据传输模块

jelly-serialization   序列化模块

jelly-service   服务模块

jelly-dao   数据访问模块

应用层协议
                                        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)

工作流程
              --------> 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详细说明:JellyAPI

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/66605.html

相关文章

  • Java+Netty、Vue+Element-UI实现即时通信应用 leo-im

    摘要:服务和服务之间的解耦和通讯可使用内置的队列或发布订阅实现,消息处理器接收到任务后,会将该任务交由线程池处理,处理后通过发送广播或发给指定的。前端基于开发,建议使用浏览器体验。在线体验测试用户,口令均为源码地址服务端端 之前工作接触了几个开源的IM产品,再加上曾经用Netty实现过几个服务,于是就有了用Netty实现一个IM的想法,于是用业余时间写了一个IM,和喜欢Netty的程序员们分...

    zhaofeihao 评论0 收藏0
  • 即时通讯之服务端篇Tigase.

    摘要:摘要是一个应用层协议,主要做网页版即时通讯,是基于和实现,服务端常见的框架有等,这三个都亲自踩过坑,唯有相对牛逼完善一些,客户端主要就是了。 摘要 xmpp是一个应用层协议,主要做网页版即时通讯,是基于RFC3920和RFC3921实现,服务端常见的框架有openfire,tigase,prosody等,这三个都亲自踩过坑,唯有tigase8.0相对牛逼(完善)一些,客户端主要就是st...

    msup 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<