【发布时间】:2016-02-26 12:50:09
【问题描述】:
我有一个客户端连接到服务器。 TCP 会话中的通信是双向的。如果我尝试同时从服务器向客户端发送多条消息,它们会混合在一个数组中。消息在到达 ByteArrayDecoder 时已经损坏。这是我的管道:
ChannelPipeline channelPipeline = ch.pipeline();
channelPipeline.addLast("byteArrayEncoder", new ByteArrayEncoder());
channelPipeline.addLast("myRequestEncoder", new MyRequestEncoder());
channelPipeline.addLast("mySecondEncoder", new MySecondEncoder());
channelPipeline.addLast("byteArraydDecoder", new ByteArrayDecoder());
channelPipeline.addLast("myResponseDecoder", new MyResponseDecoder());
channelPipeline.addLast("mySecondDecoder", new MySecondDecoder());
channelPipeline.addLast("mytHandler", myHandler);
例如,我注意到 ByteArrayDecoder 中的字节数组长度超过 500 而不是 230。并且我看到数组的内容对应于已连接的两个或多个消息。
我只有一个频道。我曾尝试在管道中使用多个 EventExecutorGroup,但这一直在发生,我最终错过了几条入站消息。
但是,使用 1tps 一切似乎都可以正常工作。
netty 应该有这样的行为吗?我错过了什么吗?
【问题讨论】:
-
TCP 应该合并大约在同一时间发送的数据。您需要实现一种协议,该协议可以确定一条消息在哪里结束,下一条消息从哪里开始。
标签: java tcp byte bytearray netty