我正在使用Netty,并且似乎不会调用ChannelPipeline中的FrameDecoder,除非/直到收到回车。例如,我有我写尝试检测,当一个完整的JSON字符串已经收到了以下解码器:Netty FrameDecoder在ChannelPipeline中没有回车没有被调用?
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字符串中的最后一次关闭'}'之后没有按回车,解码器将不会被更新的缓冲区调用。
是否有配置通道管道的工作方式不同的方式?我已经为此搜索并查看了Netty文档。我觉得我错过了一些基本的东西,我只是没有找到正确的地方或寻找正确的东西。谢谢你的帮助。
此外,我应该提到,这只是通过TCP套接字连接传递的原始JSON - 不涉及HTTP协议。 – 2013-03-22 16:59:42