【发布时间】:2012-04-18 09:05:00
【问题描述】:
我有一个我无法理解的问题。
为了理解它,我在 AS3 上编写了一个套接字客户端,在 python/twisted 上编写了一个服务器,您可以在下面看到这两个应用程序的代码。
让我们同时启动两个clients,排列它们以便您可以看到两个窗口并在两个窗口中按下连接按钮。然后按住任意按钮。
我的期望:
按下按钮的客户端向服务器发送“一些数据”消息,然后服务器将此消息发送给所有客户端(包括原始发送者)。
然后每个客户端向右移动按钮“connectButton”并以以下格式将消息打印到日志中:“min:secs:milliseconds”。
出了什么问题:
在发送消息的客户端中,动作是平稳的,但在所有其他客户端中,动作是不稳定的。
发生这种情况是因为发送到这些客户端的消息比发送到原始发送客户端的消息晚。如果我们有三个客户端(我们命名为 A,B,C),我们从 A 发送一条消息,B 和 C 的发送时间日志将是相同的。
为什么其他客户端比原始发件人晚收到此消息?
顺便说一句,在 ubuntu 10.04/chrome 上,所有的动作都很流畅。两个客户端以分开的 chrome 启动。
日志列表,四个客户端同时:
[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);
}
【问题讨论】:
-
这里只是一个想法,但我的印象是,如果 SWF 对象在 HTML 中没有焦点,它将以较低的帧速率运行。这可以解释“断断续续”,但是在 ubuntu/chrome 上它运行良好,这可能是该设置上的 flash 播放器处理它的方式不同。您是否在不同的机器上尝试过,而不仅仅是在同一台机器上?我依稀记得读到速度可以大幅下降到 2 FPS 左右
-
谢谢,我用 ubuntu 试了 2 台不同的机器,用 widnows 试了 4 台,都一样。当我在两台不同的机器上运行两个客户端时(所有客户端都有一个焦点),客户端如何等待数据有不稳定的运动和糟糕的时间日志(就像我在下面发布的问题一样)。
标签: actionscript-3 flash networking