- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 Netty 新手,并试图了解它是如何工作的。
我想在本地主机上创建一个简单的 SMTP 服务器用于测试目的,但我在理解编码器的工作原理时遇到了一个小问题。
首先这是我想要实现的目标。
正常
220 localhost Test\r\n
2
发送的消息并回复HELO another
我的问题出在2
我正在尝试使用MessageToMessageEncoder
@Override
protected void encode(ChannelHandlerContext ctx, Object msg, List<Object> out) throws Exception {
//...
out.add("220 localhost test \r\n");
}
该代码 out.add("220 localhost Test\r\n");
没有执行任何操作,没有返回错误,并且客户端不会继续指向 3
发送 HELO
消息。
但是如果我将其更改为这样
ByteBuf buff = ByteBufUtil.writeUtf8(ctx.alloc(), "220 localhost Test \r\n");
out.add(buff);
一切运行良好,客户端正在发送 HELO
消息
所以我的问题是我是否总是需要将消息编码为 ByteBuf
?我问这个是因为官方文档:http://netty.io/4.1/api/io/netty/handler/codec/MessageToMessageEncoder.html我看到类似这样的 out.add(message.toString());
最佳答案
是的。最终,有效负载必须采用 ByteBuf 的形式。但是,按照预期(但未在您引用的示例中显示),MessageToMessage 编码器将在下游管道中跟随另一个将消息转换为 ByteBuf 的编码器。在您的情况下, http://netty.io/4.1/api/io/netty/handler/codec/string/StringEncoder.html就可以解决这个问题,如该链接中的代码所示:
ChannelPipeline pipeline = ...;
// Decoders
pipeline.addLast("frameDecoder", new LineBasedFrameDecoder(80));
pipeline.addLast("stringDecoder", new StringDecoder(CharsetUtil.UTF_8));
// Encoder
pipeline.addLast("stringEncoder", new StringEncoder(CharsetUtil.UTF_8));
关于java - Netty:MessageToMessageEncoder 并转换为 ByteBuf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44058043/
我是 Netty 新手,并试图了解它是如何工作的。 我想在本地主机上创建一个简单的 SMTP 服务器用于测试目的,但我在理解编码器的工作原理时遇到了一个小问题。 首先这是我想要实现的目标。 客户端正在
我是一名优秀的程序员,十分优秀!