使用来自netty的writeandflush()将JSON数据发送到客户端,显示无效的JSON类型

时间:2014-12-09 12:29:03

标签: java flash netty

我使用java代码将JSON数据发送到flash,因为我使用的是netty server 4.0.23。 通过这种方式,我使用两个不同的数据经常发送到同一个客户端。我使用了channel.writeAndFlush()。到目前为止,一切都很顺利,而在客户端接收数据时,两个数据合并在一起,并提供无效的Json。

我在java中跟踪发送数据的格式正确。在客户端接收时无效。两个不同的JSON数据合并为单个JSON数据,因此发生了无效的Json类型错误。如果我在两个数据之间放置定时器延迟,则在客户端正确接收数据。如何在发送数据时不应用数据之间的延迟来接收正确的数据.....

我使用了以下管道

pipeline.addLast(new DelimiterBasedFrameDecoder(8192, Delimiters.lineDelimiter()));
pipeline.addLast(new StringDecoder());
pipeline.addLast(new StringEncoder());
pipeline.addLast("handler", new ServerHandler());

1 个答案:

答案 0 :(得分:1)

听起来您的客户端(接收部分)无法正确处理收到的JSON消息。 TCP是流协议,这意味着在一侧的两个写入可以被视为另一侧的一个读取。例如,当服务器发送" A"和" B",客户不会总是看到" A"和" B"但有时会看到" AB",并且它完全没问题。

为了应对这种情况,你需要构建框架'一个消息。它通常通过插入成帧解码器在Netty中完成。

在您的情况下,客户端是用Flash编写的,因此您最好只使用XMLSocket并让服务器用NUL(0)字节分隔每个JSON消息。

如果您对框架感兴趣,请阅读the Netty user guide