【问题标题】:.NETTY: Second batch of data sent includes the first?.NETTY:第二批发送的数据包括第一批吗?
【发布时间】:2018-04-11 23:35:16
【问题描述】:

我注意到,当我为 dotnetty 运行解码器时,它包含以前的数据。我不知道为什么,但是第一个数据包(数据)通过正常,客户端出于某种原因发送的第二个数据位包括数据的两个部分,即之前处理的数据。

我已经检查了客户端,客户端并没有发送它们,服务器只是接收它们,我觉得这是DotNetty正在做的事情?

internal class JsonToPacketDecoder : ByteToMessageDecoder
{
    protected override void Decode(IChannelHandlerContext context, IByteBuffer input, List<object> output)
    {
        Console.WriteLine("Decoding: " + input.ToString(Encoding.UTF8) + " \n");
        output.Add(new IncomingPacket(JObject.Parse(input.ToString(Encoding.UTF8)).ToFlatDictionary()));
    }
}

似乎input.ToString(Encoding.UTF8) 两者都包含?

【问题讨论】:

    标签: c# .net azure netty


    【解决方案1】:

    出现此问题是因为ToString(Encoding) 在显示内容时不消耗任何输入字节。

    这是为什么?这是因为“to string”函数的通常用例不在实际读取字节重要的空间中,因为它基本上每次都读取所有字节,即使已收到 2 个“数据包”。

    toString 的实际用例是在处理程序中,其中已经将数据包分帧成适当的块。

    您可能想要的是DelimiterBasedFrameDecoder,它将您的传入流拆分为由换行符或空字节分隔的数据包,然后使用ChannelHandlerAdapter,将数据包解码为 JSON。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-30
      • 1970-01-01
      • 2012-10-25
      • 2021-05-08
      • 1970-01-01
      相关资源
      最近更新 更多