实现的功能
心跳机制 and 长连接 and 重连机制 and 应用消息传输:
这里最关键的就是通过netty中的 IdleStateHandler
超时机制来实现心跳和重连
然后通过org.msgpack
编码器来实现跨平台数据传输,
在这实现的功能就是通过Scanner来输入消息得到服务端的回应,超过设定的超时时间就触发超时事件来进行心跳传输,如果服务端宕机客户端就会一直发起重连
所需要的依赖:
<!-- 解码and编码器 -->
<!-- https://mvnrepository.com/artifact/org.msgpack/msgpack -->
<dependency>
<groupId>org.msgpack</groupId>
<artifactId>msgpack</artifactId>
<version>0.6.12</version>
</dependency>
<!-- netty 核心依赖 -->
<!-- https://mvnrepository.com/artifact/io.netty/netty-all -->
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.6.Final</version>
</dependency>
目录结构:
导入以上依赖
↓
创建配置模型model(模型类) , TypeData(参数配置类)
↓
创建解码and编码器MsgPckDecode(解码器) ,MsgPckEncode(编码器)
↓
创建公用的控制器 Middleware
↓
创建客户端及客户端控制器client(客户端启动类) , client3Handler(客户端控制器)
↓
创建服务端以及控制器server(客户端启动类) , server3Handler(客户端控制器)
该类使用了msgpack , It’s like JSON. but fast and small.
import java.io.Serializable;
import org.msgpack.annotation.Message;
/**
* 消息类型分离器
* @author Administrator
*
*/
@Message
public class Model implements Serializable{
private static final long serialVersionUID = 1L;
//类型
private int type;
//内容
private String body;
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
@Override
public String toString() {
return "Model [type=" + type + ", body=" + body + "]";
}
}
编写一个配置类接口,用于控制心跳包和应用消息的处理
/**
* 配置项
* @author Administrator
*
*/
public interface TypeData {
byte PING = 1;
byte PONG = 2;
//顾客
byte CUSTOMER = 3;
}
MsgPckDecode(解码器)
import java.util.List;
import org.msgpack.MessagePack;
import io.netty.buffer.ByteBuf;
import io.netty.channel.Channel