2010-08-19 2 views
1

나는 twisted를 사용하여 클라이언트와 서버를 구현하고있다. 클라이언트와 서버 사이에 RPC를 설정했습니다. 따라서 클라이언트에서 protocol.REQUEST_UPDATE_STATS(stats)을 수행하면 클라이언트 전송에 이라는 메시지가 전송되고 이는 ["update_stats", stats]의 일부 인코딩 된 버전입니다. 서버가이 메시지를 받으면 서버 프로토콜의 dataReceived 함수가 호출되고 디코드되며이 경우 CMD_UPDATE_STATS(stats)과 같은 메시지를 기반으로 함수를 호출합니다. ...트위스트 RPC가 순서대로 도착하도록 보장되어 있습니까?

protocol.REQUEST_UPDATE_STATS("stats1") 
protocol.REQUEST_UPDATE_STATS("stats2") 

나는 "stats1" 메시지가 서버에 "stats2" 메시지 전에 도착하는 것을 보장하고있다 :

경우, 클라이언트에서, 나는 그런 짓을?

업데이트 : 더 명확하게 편집 됨. 그러나 지금은 대답이 분명한 것처럼 보입니다.

+0

"RPC"란 무엇입니까? 네트워크 메시지를 의미합니까? TCP 소켓이나 UDP를 사용하고 있습니까? 다른 메시지가 같은 소켓이나 다른 소켓을 통해 전달되고 있습니까? 귀하의 프로토콜이 비동기 응답을 허용합니까? 요청을 재정렬 할 수있는 미들웨어가 있습니까? 자신의 상황에 맞지 않는 추측 대신 정답을 원한다면 훨씬 더 구체적이어야합니다. – Glyph

답변

1

그들은 파이썬 프로세스가 요청을 수신 한 순서대로 도착합니다. 여기에는 연결 설정 시간과 요청 데이터가 들어있는 패킷이 포함됩니다. 따라서 네트워크 대기 시간, 패킷 손실, 송신자 측 패킷 대기열 등으로 인해 송신 프로세스가 요청을 보낸 순서가 보장되지 않습니다. "순서대로"는 분산 시스템에서도 느슨하게 정의됩니다.

하지만 일반적으로 비교적 많은 시간 (인터넷을 통해 100 분의 1 초)으로 분리되어있는 한 순서대로 배달되는 것으로 간주 할 수 있습니다.

+2

* 보낸 * 것으로 순서대로 계산할 수 있습니다. 아마도. 당신이 사용하고있는 수송 수단의 종류에 따라 파이썬의 선은 다음과 같이 말합니다 : "모호함에 직면하여 유혹을 거부하십시오.". 이 질문은 매우 모호하며 질문자가 더 많은 정보를 제공 할 때까지 대답해서는 안됩니다. :). – Glyph

관련 문제