I have a problem that I cannot understand.
To understand this, I wrote a socket client on AS3 and a server on python / twisted, you can see the code of both applications below.
Allow two clients to start at the same time, arrange them so that you can see both windows and click the connect button in both windows. Then press and hold any button.
What I expect:
A client with a pressed button sends a βsome dataβ message to the server, then the server sends this message to all clients (including the original sender).
Then each client moves on the right button "connectButton" and prints a message to the log with time in the following format: "min: secs: milliseconds".
What's wrong:
The movement is smooth in the client that sends the message, but in all other clients the movement is jerky.
This is because messages for these clients arrive later than the original sending client. And if we have three clients (let's call them A, B, C) and we will send a message from A, the time log of sending B and C will be the same.
Why do other clients receive these messages later than the original sender?
By the way, on ubuntu 10.04 / chrome the whole movement is smooth. Two clients run in separate chromes.
window screenshot
linux screen shot
List of magazines, four clients at a time:
[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 client code , I left only the corresponding part, the full code is 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 .