套接字没有收到来自服务器的两条消息(几乎同时)

Socket not receiving both messages from server (almost at same time)

所以我遇到了这个问题,我正在使用 openfl.net.Socket 连接到我的服务器并从中接收消息。 问题是服务器几乎同时发送两条消息,而我的套接字似乎只读取一条消息,我尝试在第二条消息上放置一个断点并在它停止后立即释放它(比如 0.5 秒的睡眠),等等我的客户收到两条消息,但几乎同时发送两条消息我只收到一条...提示?

socket.addEventListener(ProgressEvent.SOCKET_DATA, onResponse);
function onResponse(e:ProgressEvent):Void
    {
        trace("response");
        if (socket.bytesAvailable > 0)
        {
            var size:Int = socket.readInt();
            var domainId:Int = socket.readInt();
            var messageId:Int = socket.readInt();
            var count:Int = socket.readInt();

            var socketData:String = socket.readUTFBytes(socket.bytesAvailable);
            trace("RECEIVE: " + socketData);

            var message:Message = Message.JSONToMessage(socketData);
            Domain.processMessage(message);
        }
    }

我希望我说清楚了

因此,在接收方,在一个 recv 中,您将获得从另一端发送的所有数据。

关于 TCP 您应该了解的一件事是它不维护消息边界。它实际上并不知道 "message" 是什么。它是一个字节流协议。这里的三个 send 可以在另一端产生三个 recv,甚至在另一端产生一个 recv,以实现完整的数据交换。

使用 TCP 的应用程序应该根据 TCP 移交给它们的内容构建 "messages"。 TCP 只是确保数据按照发送的顺序给出,并尽力将发送的数据包传递给接收方。由应用程序协议来定义应该如何处理数据。