2013-08-25 1 views
1

나는 내가 만들고있는 게임에서 플레이어 좌표를 처리하는 간단한 서버를 가지고있다. 그러나 좌표를 보내도록 서버를 설정하면 0.5 초마다이 좌표가 전송됩니다.소켓에서 파이썬 "클리어"데이터 - 파이썬 2.7.5

"[[0,(0,0)],[0,(0,0)]]""[[0,(0,0)],[0,(0,0)]]" 

서버가 다시 보내려고하기 전에 소켓의 데이터를 "지우는"방법이 있습니까?

이 작동하지 않습니다 중 하나

s.send("") 

답변

0

이 바로 TCP 이상? TCP는 신뢰할 수있는 바이트 스트림을 제공하지만 메시지 경계가 없음. 따라서 은 결코에 해당합니다. 송신자가 보내는 "청크"에서 수신자에게 데이터를 전달하는 TCP에 의존해야합니다.

이 경우, 작은 쓰기를 축소하는 TCP의 오래된 최적화 인 "Nagle 알고리즘"(http://en.wikipedia.org/wiki/Nagle%27s_algorithm)의 효과를 관찰하고 있다고 생각합니다. 당신은 TCP_NODELAY 소켓 옵션을 사용하여 보낸 사람에게 이것을 끌 수 있습니다. 그러면 테스트 프로그램이 문제가 해결 된 것처럼 보일 수 있습니다. 그러나 근본적인 방법으로, 그것은 아닙니다! TCP는 보낸 바이트와 다른 청크로 바이트를 전달하기로 결정할 때 항상 발생할 수 있습니다.

TCP를 사용하면 메시지 분리를 위해 항상 어떤 종류의 프레임을 사용해야합니다. 또는 UDP 또는 SCTP와 같은 메시지 지향 전송을 사용할 수 있지만 다른 문제가 있습니다. 또는 높은 수준의 메시지 대기열 시스템 (ZeroMQ, RabbitMQ 등)을 사용합니다.

+0

감사합니다. 메시지 분할 작업을 추가합니다. workde – user2016705

관련 문제