gpt4 book ai didi

java - Netty FrameDecoder 没有在 ChannelPipeline 中调用而没有回车?

转载 作者:行者123 更新时间:2023-12-02 07:10:39 25 4
gpt4 key购买 nike

我正在使用 Netty,似乎除非/直到收到回车符,否则不会调用 ChannelPipeline 中的 FrameDecoder。例如,我编写了以下解码器来尝试检测何时收到完整的 JSON 字符串:

public class JsonDecoder extends FrameDecoder {
@Override
protected Object decode(ChannelHandlerContext ctx, Channel channel, ChannelBuffer buf) {
char inChar = 0;
ChannelBuffer origBuffer = buf.copy();
StringBuilder json = new StringBuilder();
int ctr = 0;
while(buf.readable()) {
inChar = (char) buf.readByte();
json.append(inChar);
if (inChar == '{') {
ctr++;
} else if (inChar == '}') {
ctr--;
}
}
if (json.length() > 0 && ctr == 0) {
return origBuffer;
}
buf.resetReaderIndex();
return null;
}
}

(请原谅有些草率的代码 - 这是我第一次尝试使用 Netty,也是一次学习经历。)

我看到的情况是,当我通过使用 telnet 连接到服务器、粘贴一些有效的 JSON 并按回车键来测试它时,效果很好。但是,如果我在 JSON 字符串中的最终结束“}”之后不按回车键,则永远不会使用更新的缓冲区调用解码器。

有没有办法配置 channel 管道以不同的方式工作?我在 Google 上搜索了这个并浏览了 Netty 文档。我觉得我错过了一些基本的东西,我只是没有在正确的地方寻找或寻找正确的东西。感谢您的帮助。

最佳答案

您的 telnet 客户端是否恢复为“旧的逐行”模式,即仅将完成的行发送到服务器 ( telnet man page )?尝试编写一个简单的 Java 客户端来发送消息。

关于java - Netty FrameDecoder 没有在 ChannelPipeline 中调用而没有回车?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15575258/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com