套接字没有收到来自服务器的两条消息(几乎同时)
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 只是确保数据按照发送的顺序给出,并尽力将发送的数据包传递给接收方。由应用程序协议来定义应该如何处理数据。
所以我遇到了这个问题,我正在使用 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 只是确保数据按照发送的顺序给出,并尽力将发送的数据包传递给接收方。由应用程序协议来定义应该如何处理数据。