Tengo un problema que no puedo entender.Extraño Flash AS3 xml Comportamiento de socket
Para entenderlo escribí un cliente de socket en AS3 y un servidor en python/twisted, puede ver el código de ambas aplicaciones a continuación.
Iniciemos dos clients al mismo tiempo, acomódelos para que pueda ver ambas ventanas y presione el botón de conexión en ambas ventanas. Luego presione y mantenga presionado cualquier botón.
Lo que estoy esperando:
cliente con el botón presionado envía un mensaje "algunos datos" al servidor, el servidor envía este mensaje a todos los clientes (incluyendo el remitente original).
Luego, cada cliente mueve a la derecha el botón 'connectButton' e imprime un mensaje en el registro con la hora en el siguiente formato: "min: secs: milisegundos".
lo que va mal:
El movimiento es suave en el cliente que envía el mensaje, pero en todos los demás clientes el movimiento es desigual.
Esto sucede porque los mensajes a esos clientes llegan más tarde que al cliente de envío original. Y si tenemos tres clientes (llamémosles A, B, C) y enviamos un mensaje desde A, el registro de tiempo de envío de B y C será el mismo.
¿Por qué otros clientes reciben estos mensajes más tarde que el remitente original?
Por cierto, en ubuntu 10.04/chrome todo el movimiento es fluido. Dos clientes se lanzan en cromos separados.
de ficha de registro, cuatro clientes de forma simultánea: código de cliente
[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, me dejaron parte sólo es relevante, 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);
}
Solo un pensamiento aquí, pero tengo la impresión de que si un objeto SWF no tiene foco en HTML, se ejecutará a una velocidad de fotogramas más baja. Esto explicaría el "choppyness", sin embargo, en ubuntu/chrome funcionó bien, que podría ser el reproductor de flash en esa configuración que lo maneja de manera diferente. ¿Lo has probado en diferentes máquinas y no solo en la misma máquina? Recuerdo vagamente haber leído que la tasa puede descender drásticamente a alrededor de 2 FPS –
gracias, probé 2 máquinas diferentes con ubuntu y 4 con widnows, de todos modos. Cuando estoy ejecutando dos clientes, en dos máquinas diferentes (todos los clientes tienen un foco), los clientes esperan que los datos tengan un movimiento discontinuo y un mal registro de tiempo (como el que he publicado en la pregunta a continuación). –