最近发表
canal store模块用于存储parser模块解析后的binlog,以供client获取,其实现借鉴了Disruptor的RingBuffer,简而言之,你可以把其当做一个环形队列。
JDK序列化 2018-09-09 20:36:35
ObjectEncoder/ObjectDecoder使用JDK序列化机制编解码,因此我们可以使用Java对象作为请求和响应参数,限制是对象必须实现Serializable。JDK序列化机制的缺点是:序列化的性能以及序列化后对象占用的字节数比较多。优点是:这是对JDK默认支持的机制,不需要引入第三方依赖。
在实际开发中,为了简化开发,通常请求和响应都使用使用Java对象表示,对使用者屏蔽底层的协议细节。例如一些RPC框架,支持把用户定义的Java对象当做参数去请求服务端,服务端响应也是一个Java对象。
变长协议 2018-09-09 20:23:12
大多数的协议(私有或者公有),协议头中会携带长度字段,用于标识消息体或者整包消息的长度,例如SMPP、HTTP协议等。由于基于长度解码需求 的通用性,Netty提供了LengthFieldBasedFrameDecoder/LengthFieldPrepender,自动屏蔽TCP底层的拆包和粘 包问题,只需要传入正确的参数,即可轻松解决“读半包“问题。
定长协议 2018-09-09 20:08:37
FixedLengthFrameDecoder采用的是定长协议:即把固定的长度的字节数当做一个完整的消息