파이썬에서 신뢰할 수 있고 완전히 주문한 멀티 캐스트 시스템을 작성합니다

StackOverflow https://stackoverflow.com/questions/176179

문제

파이썬에서 처음부터 신뢰할 수 있고 완전히 주문한 멀티 캐스트 시스템을 작성해야합니다. 외부 라이브러리를 사용할 수 없습니다. 중앙 시퀀서를 사용할 수 있습니다.

두 가지 즉각적인 접근 방식이있는 것 같습니다.

  1. 효율적인 시스템을 작성하여 각 멀티 캐스트 메시지에 고유 한 ID를 첨부하고, 메시지 IT의 시퀀서 멀티 캐스트 시퀀스 번호를 받고 ACK와 Nack을 전송합니다.
  2. 비효율적 인 홍수 시스템을 작성하십시오. 각 멀티커는 단순히 각 메시지를 한 번받는 각 메시지를 다시 제시합니다 (해당 특정 멀티스터가 전송하지 않는 한).

두 번째 옵션을 사용할 수 있으며 그렇게하는 경향이 있습니다.

현재 UDP 메시지 (유일한 옵션 인 것 같습니다)는 일부 메시지가 손실 될 수 있음을 의미합니다. 즉, #2에 따라 재직 할 수 있도록 보낸 각각의 UDP 메시지를 고유하게 식별 할 수 있어야합니다. 실제로 고유 한 숫자를 생성하고 (예 : 발신자 주소와 카운터를 사용하여) 전송 된 모든 UDP 메시지에 포장해야합니까? 어떻게할까요? 그리고 데이터 스트림이 아닌 파이썬에서 단일 UDP 메시지를 어떻게 받습니까? socket.recv)?

도움이 되었습니까?

해결책

홍수 접근 방식은 나쁜 상황이 악화 될 수 있습니다. 네트워크로드가 높기 때문에 메시지가 삭제되면 모든 노드가 재현되면 모든 메시지가 상황을 악화시킵니다.

취하는 최선의 접근 방식은 보내는 데이터의 특성에 따라 다릅니다. 예를 들어:

  1. 멀티미디어 데이터 : 리치, 삭제 된 패킷은 삭제 된 프레임이며, 다음 프레임이 어쨌든 도착하는 시점은 중요하지 않습니다.
  2. 고정 기간 데이터 : 수신자 노드는 업데이트를 수신 할 때마다 재설정되는 타이머를 유지합니다. 시간이 만료되면 마스터 노드에서 누락 된 업데이트를 요청합니다. 리트리는 요청 노드와 유사 할 수 있습니다.

이러한 상황 중 어느 것도 적용되지 않으면 (모든 노드에서 모든 패킷을 수신해야하고 패킷 타이밍을 예측할 수 없으므로 수신자는 자체적으로 누락 된 패킷을 감지 할 수 없음) : 귀하의 옵션은 다음과 같습니다.

  1. 각 패킷의 모든 노드에서 명시 적 ACK. 발신자 재시도 (유니 캐스트) ACKED가없는 패킷.
  2. 각 노드가 수동으로 반복되는 TCP 기반 그리드 접근법은 이웃 노드에 수신 된 패킷을 반복하여 TCP 메커니즘에 의존하여 전달을 보장합니다.

이후 시퀀스 번호가있는 하나를 수신하면 누락 된 패킷을 알아 차리는 수신자에게 의존 할 수 있지만,이를 통해 발신자는 하나 이상의 추가 패킷이 전송 될 때까지 패킷을 유지해야합니다. 긍정적 인 ACK를 요구하는 것이 더 신뢰할 수 있고 입증 가능합니다.

다른 팁

당신이 취하는 접근법은 당신이 보내는 데이터의 특성, 네트워크의 규모 및 보내는 데이터의 수량에 크게 의존 할 것입니다. 특히 각 노드가 연결된 대상 수에 따라 다릅니다.

이것이 각 노드에 대한 많은 수의 대상과 대량의 데이터로 확장 될 것으로 기대한다면, 모든 패킷에 ACK/NAK를 추가하는 오버 헤드는 특히 처리량을 부정적인 제한하기에 충분하다는 것을 알 수 있습니다. 당신은 믹스에 리트라스미션을 추가합니다.

Frank Szczerba는 멀티미디어 데이터가 잃어버린 패킷에서 복구 할 수 있다는 이점이 있다고 말했습니다. 보내는 데이터를 제어 할 수있는 경우 삭제 된 패킷에 대한 감수성을 최소화 할 수 있도록 페이로드를 설계해야합니다.

보내는 데이터가 삭제 된 패킷을 견딜 수없는 경우 그리고 네트워크의 높은 활용도로 확장하려고 시도하면 UDP가 사용하기에 가장 적합한 프로토콜이 아닐 수도 있습니다. 일련의 TCP 프록시 (각 노드 레트라 츠, 유니 캐스트, 홍수 아이디어와 유사한 다른 모든 연결된 노드에)를 구현하는 것이 더 안정적인 메커니즘이 될 것입니다.

이 모든 것을 말하면이 응용 프로그램에 True MultiCast를 사용하는 것을 고려해 보셨습니까?


방금 "숙제"태그를 보았습니다 ... 이러한 제안은 숙제 문제에 적합하지 않을 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top