Skip to content

yangchenjava/com.yangc.hub

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 

Repository files navigation

com.yangc.hub

基于Netty的初级推送服务器实现

Netty - 强大的网络应用程序框架,封装了java nio,基于事件驱动的异步api。
ActiveMQ - apache的一款消息服务器,这里主要用于多台推送服务器间进行消息传送,达到负载均衡的作用。
Protocol Buffer - google的一种数据交换的格式。
实现两种协议方式(通过配置文件进行协议切换,均可达到通信目的):

  1. 自定义协议,协议内容如下;
  2. 通过protobuf实现,项目中有定义好的proto文件;

在resources文件夹中,有jmeter测试最大连接数的测试用例。

1.RESULT

每个request的发生都要返回对应的response,又称之为响应报文。

协议:
0x68 [contentType(0x00)] [uuid] [fromLength] [toLength] [dataLength] [from] [to] 0x68 [success] [data] [crc] 0x16

2.LOGIN

在首次消息发送前,必须先登录,如果多次验证失败,将强制关闭连接;如果绕开登录直接发送消息,也将强制关闭连接。登录成功后,会收到之前未读的离线文本,或者未收到的离线文件。

协议:
0x68 [contentType(0x01)] [uuid] 0x68 [usernameLength] [passwordLength] [username] [password] [crc] 0x16

3.CHAT

发送文本,如果接收方没有在线,将转为离线文本,待下次登录时,会接收到。

协议:
0x68 [contentType(0x02)] [uuid] [fromLength] [toLength] [dataLength] [from] [to] 0x68 [data] [crc] 0x16

4.READY_FILE

发送文件之前要询问对方是否接收此文件,同时会携带要发送文件的属性信息。如果接收方返回接收,则开始发送文件;如果接收方返回拒绝,则不发送文件。

协议:
0x68 [contentType(0x03)] [uuid] [fromLength] [toLength] [from] [to] 0x68 [fileNameLength] [fileName] [fileSize] [crc] 0x16

5.TRANSMIT_FILE

发送文件,如果接收方没有在线,将转为离线文件,待下次登录时,将离线文件推送给接收方。

协议:
0x68 [contentType(0x04)] [uuid] [fromLength] [toLength] [dataLength] [from] [to] 0x68 [fileNameLength] [fileName] [fileSize] [fileMd5] [offset] [data] [crc] 0x16

6.HEART

发送心跳,保证连接可用。

协议:
0x68 [contentType(0x55)] 0x68 [crc] 0x16

Tips:

1.这里说的消息包括:文本、文件。
2.是否支持离线文本,可以配置。
3.支持离线文件,但是不支持断点续传。
4.支持黑名单,白名单的设置。
5.通过MQ可以达到Netty集群的作用。(负载均衡,非灾难转移)

About

基于Netty的消息推送服务器实现

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published