编解码技术就是java序列化技术,序列化的目的就两个,第一进行网络传输,第二对象持久化。虽然我们可以使用java进行对象序列化,nettty去传输,但是java序列化的硬伤太多,比如java序列化没法跨语言、序列化后码流太大、序列化性能太低等。这里就要依赖主流的编解码框架:
- JBoss的Marshalling包
- google的Protobuf
- 基于Protobuf的Kyro
- MessagePack框架
JBoss Marshalling
JBoss Marshalling是一个对象序列化包,对JDK默认的序列化框架进行了优化,但由保持跟java.io.Serializable接口的兼容,同时增加了一些可调的参数和附加特性。类库:jboss-marshalling-x.x.x、jboss-marshalling-serial-x.x.x。
1 | public class Server { |
1 | public class ServerHandler extends ChannelHandlerAdapter{ |
1 | public final class MarshallingCodeCFactory { |
1 | public class Client { |
1 | public class ClientHandler extends ChannelHandlerAdapter{ |
1 | public class Request implements Serializable{ |
1 | public class Response implements Serializable{ |
Netty的WebSocket
WebSocket将网络套接字引入到了客户端和服务端,我们之前实现聊天功能,可能需要古老的Socket技术,亦或是古老的DWR框架,反向Ajax技术,,再有可能就是Comet服务器技术,H5的WebSocket很轻松的可以进行聊天功能的实现,Netty和H5的WebSocket结合非常简单,Netty为我们封装了其协议类,可以很方百你的使用,WebSocket特点:
- 单一的TCP连接,双方可通信
- 对代理、防火墙和路由器透明
- 无头部信息、Cookie和身份验证
- 无安全开销
- 通过ping/pong帧保持链路激活
- 服务器可主动传递消息给客户端,不再需要客户端轮询