【问题标题】:mina 2.0.13 + websocket + buffer.capacitymina 2.0.13 + websocket + buffer.capacity
【发布时间】:2016-04-01 06:16:46
【问题描述】:

背景: 我正在通过已修复 buf 问题的 mina web socket (https://issues.apache.org/jira/browse/DIRMINA-907) 发送数据..

我曾经通过网络套接字发送 json 消息大约 50 个字节。有时,它会达到 70 个字节...

问题是: 最初, IOBuffer.capacity() 为 2048 --> 2048 --> 1024 --> 1024 -> 512 -> 512 -> 256 -> 256 -> 128 -> 128 -> 64 -> 64 -> 64 -> 64

如果 json 消息变成 70 字节。它将在 messageReceived(IoSession session, Object message) 中拆分为两条消息。有什么办法可以解决这个问题。

我可以存储不完整的消息,但它会引发另一个问题,例如 2 条 json 消息或 1 条有效 json 消息和 1 条无效 json 消息。

谢谢。

【问题讨论】:

    标签: sockets web buffer mina


    【解决方案1】:

    我假设您正在使用带有 MINA 的 TCP。当通过 TCP 发送大消息时,它会被分成更小的块以适合更小的数据包。 TCP 确保数据包数据在到达目的地时以正确的顺序到达。

    发生的情况是您的 JSON 消息在通过网络发送时被拆分。即使它按顺序到达目的地,也需要将两个块放在一起。

    MINA 用户指南有一个很好的例子来说明如何做到这一点,它应该可以帮助你。你可以找到它here

    【讨论】:

      【解决方案2】:

      最后,我通过添加来解决它

      acceptor.getSessionConfig().setMinReadBufferSize(2048);

      进入我的代码。

      设置最小读取缓冲区,以防止消息分成两部分.. 我知道这不是一个完美的解决方案。但我的消息不会超过 2K。

      jython234 建议的解决方案不适合我的需要。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-31
        • 2017-10-06
        • 2016-06-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-13
        相关资源
        最近更新 更多