@ChannelHandler.Sharable public class ProtobufEncoder extends MessageToMessageEncoder<MessageLiteOrBuilder>
Message
和MessageLite
编码为ByteBuf
。
TCP / IP的典型设置是:
ChannelPipeline
pipeline = ...;
// Decoders
pipeline.addLast("frameDecoder",
new LengthFieldBasedFrameDecoder
(1048576, 0, 4, 0, 4));
pipeline.addLast("protobufDecoder",
new ProtobufDecoder
(MyMessage.getDefaultInstance()));
// Encoder
pipeline.addLast("frameEncoder", new LengthFieldPrepender
(4));
pipeline.addLast("protobufEncoder", new ProtobufEncoder
());
然后您可以使用MyMessage
而不是ByteBuf
作为消息:
void channelRead(ChannelHandlerContext
ctx, Object msg) {
MyMessage req = (MyMessage) msg;
MyMessage res = MyMessage.newBuilder().setText(
"Did you say '" + req.getText() + "'?").build();
ch.write(res);
}
ChannelHandler.Sharable
Constructor and Description |
---|
ProtobufEncoder() |
Modifier and Type | Method and Description |
---|---|
protected void |
encode(ChannelHandlerContext ctx, MessageLiteOrBuilder msg, java.util.List<java.lang.Object> out)
从一条消息编码到另一条消息。
|
acceptOutboundMessage, write
bind, close, connect, deregister, disconnect, flush, read
ensureNotSharable, exceptionCaught, handlerAdded, handlerRemoved, isSharable
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
exceptionCaught, handlerAdded, handlerRemoved
protected void encode(ChannelHandlerContext ctx, MessageLiteOrBuilder msg, java.util.List<java.lang.Object> out) throws java.lang.Exception
MessageToMessageEncoder
encode
在课堂上
MessageToMessageEncoder<MessageLiteOrBuilder>
ctx
- 这MessageToMessageEncoder
属于的ChannelHandlerContext
msg
- 要编码到另一个的消息
out
- 应该添加编码味精的
List
需要做某种聚合
java.lang.Exception
- 发生错误时抛出
Copyright © 2008–2018 The Netty Project. All rights reserved.