gpt4 book ai didi

actionscript-3 - 奇怪的 Flash AS3 xml 套接字行为

转载 作者:行者123 更新时间:2023-12-04 06:37:38 24 4
gpt4 key购买 nike

我有一个我无法理解的问题。

为了理解它,我在 AS3 上编写了一个套接字客户端,在 python/twisted 上编写了一个服务器,您可以在下面看到两个应用程序的代码。

让我们推出两个 clients同时,排列它们以便您可以看到两个窗口并按两个窗口中的连接按钮。然后按住任意按钮。

我期待的是:

按下按钮的客户端向服务器发送一条消息“一些数据”,然后服务器将此消息发送给所有客户端(包括原始发件人)。

然后每个客户端向右移动按钮“connectButton”并以以下格式将消息随时间打印到日志中:“min:secs:milliseconds”。

出了什么问题:

在发送消息的客户端中,运动是平滑的,但在所有其他客户端中,运动是生涩的。

发生这种情况是因为到这些客户端的消息比原始发送客户端晚到达。如果我们有三个客户端(让我们将它们命名为 A、B、C)并且我们从 A 发送一条消息,那么 B 和 C 的发送时间日志将是相同的。

为什么其他客户端比原始发件人更晚收到此消息?

顺便说一句,在 ubuntu 10.04/chrome 上,所有的 Action 都很流畅。两个客户端在单独的 chromes 中启动。

windows screenshot

linux screenshot

日志列表,四个客户端同时运行:

[16:29:33.280858] 62.140.224.1 >> some data
[16:29:33.280912] 87.249.9.98 << some data
[16:29:33.280970] 87.249.9.98 << some data
[16:29:33.281025] 87.249.9.98 << some data
[16:29:33.281079] 62.140.224.1 << some data
[16:29:33.323267] 62.140.224.1 >> some data
[16:29:33.323326] 87.249.9.98 << some data
[16:29:33.323386] 87.249.9.98 << some data
[16:29:33.323440] 87.249.9.98 << some data
[16:29:33.323493] 62.140.224.1 << some data
[16:29:34.123435] 62.140.224.1 >> some data
[16:29:34.123525] 87.249.9.98 << some data
[16:29:34.123593] 87.249.9.98 << some data
[16:29:34.123648] 87.249.9.98 << some data
[16:29:34.123702] 62.140.224.1 << some data

AS3 客户端代码 ,我只留下了相关部分, full code here .
        private var socket           :XMLSocket;

socket = new XMLSocket();
socket.addEventListener(DataEvent.DATA, dataHandler);

private function dataHandler(event:DataEvent):void
{
var now:Date = new Date();
textField.appendText(event.data + " time = " + now.getMinutes() + ":" + now.getSeconds() + ":" + now.getMilliseconds() + "\n");
connectButton.x += 2;
}

private function keyDownHandler(event:KeyboardEvent):void
{
socket.send("some data");
}

private function connectMouseDownHandler(event:MouseEvent):void
{
var connectAddress:String = "ep1c.org";
var connectPort:Number = 13250;

Security.loadPolicyFile("xmlsocket://" + connectAddress + ":" + String(connectPort));
socket.connect(connectAddress, connectPort);
}

Python server code .

最佳答案

您可能会遇到 ACK delay 的某种组合和/或 Nagle's algorithm .这两者都可以选择性地延迟 TCP session 上的数据移动,并且它们的实现因平台而异。

尝试使用 setsockopt()TCP_NODELAY在套接字上禁用 Nagle。

AFIK,Windows 不允许您基于每个套接字禁用 ACK 延迟:您必须 edit the registry并为所有 TCP 禁用它。所以试试 TCP_NODELAY第一的。如果这不起作用,则尝试禁用 ACK 延迟。即使注册表编辑对您的应用程序不实用,只要知道 ACK 延迟是否是问题就可以为您指明其他解决方法的正确方向。

关于actionscript-3 - 奇怪的 Flash AS3 xml 套接字行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8940606/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com