내가 이해할 수없는 문제가 있습니다.Strange Flash AS3 xml 소켓 동작
나는 AS3에서 소켓 클라이언트를 작성했고 파이썬에서 서버를 작성했는데/꼬인 경우 아래 두 응용 프로그램의 코드를 볼 수 있습니다.
clients 두 개를 동시에 시작하고 두 창을 모두 볼 수 있고 두 창에서 연결 버튼을 누를 수 있도록 정렬하십시오. 그런 다음 아무 버튼이나 누르고 있습니다. 내가 기대하고있어 무엇
: 눌러 진 버튼
클라이언트는 메시지 서버에 "일부 데이터를"전송은, 서버는 (원래 보낸 사람을 포함하여) 모든 클라이언트에이 메시지를 보냅니다.
그러면 각 클라이언트는 'connectButton'버튼을 오른쪽으로 이동하고 "min : secs : milliseconds"형식의 시간과 함께 메시지를 로그에 인쇄합니다.
모션 메시지를 보내는 클라이언트 부드러운이지만, 다른 모든 클라이언트의 움직임 육포입니다 :
잘못 무슨 일이야.
이러한 클라이언트에 대한 메시지가 원래 보내는 클라이언트보다 늦게 도착하기 때문에 이러한 현상이 발생합니다. 그리고 우리가 세 개의 클라이언트 (A, B, C로 지칭)를 가지고 A에서 메시지를 보내면 B와 C의 전송 시간 로그는 동일하게됩니다.
왜 다른 클라이언트가 원래 보낸 사람보다 나중에이 메시지를 수신합니까?
우분투 10.04/크롬에서는 모든 동작이 부드럽습니다. 두 명의 고객이 분리 된 크롬으로 출시됩니다. 동시에
로그의목록, 넷 클라이언트 :
[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의 포커스가 없으면 낮은 프레임 속도로 실행됩니다. 이것은 "고르지 않음"을 설명 할 것입니다, 우분투/크롬에서는 괜찮습니다. 설치 프로그램에서 플래시 플레이어가 될 수 있습니다. 다르게 처리합니다. 당신은 같은 기계에있는 것이 아니라 다른 기계들에서 시도해 보셨습니까? 나는 막연하게 속도가 약 2 FPS로 떨어질 수 있다는 것을 기억하고있다. –
고맙다. 나는 우분투와 2 대의 다른 머신을 시험해 보았다. 두 개의 다른 컴퓨터 (모든 클라이언트가 포커스가 있음)에서 두 클라이언트를 실행 중이면 클라이언트가 데이터 대기 모드 및 불량 시간 로그를 보냅니다 (아래 질문 에서처럼). –