2010-03-16 8 views
4

다른 클라이언트에 안정적으로 멀티 캐스트 할 수있는 클라이언트가 필요합니다. 이것은 멀티 캐스트 그룹 내의 클라이언트간에 TCP를 사용하여 안정적으로 연결할 수 있음을 의미합니다. 그게 n^2 연결까지 오지 않니? 그건 나에게 어리석은 것처럼 보입니다. 더 쉽게 신뢰성있게 멀티 캐스팅 할 수있는 방법이 없지 않겠습니까?TCP 멀티 캐스트 및 멀티 스레딩

편집 : UNIX/C

편집 : 멀티 스레딩이 활동하기 시작하는 방법이 명확하지 않았다. 하지만 만약 내가^2 연결을 열어 보았다면, 나는 멀티 쓰레딩이 될 것이고, 그것은 내가 원하는 것보다 훨씬 더 복잡합니다.

+0

멀티 캐스트가 필요합니까? 당신은 스타/링/그리드 타입 패턴으로 클라이언트를 구조화 할 수도 있습니다 ... – wds

+0

네, 멀티 캐스트가 필요합니다. 나는 불행하게도 그것을 바꿀 힘이 없다. –

+1

멀티 스레딩과 어떤 관련이 있습니까? –

답변

4

여러 신뢰할 수있는 멀티 캐스트 솔루션이 있습니다.내가 처음 두 사람을 시도했습니다

  • Norm Protocol
  • PGM
    • DDS (데이터 배포 서비스).

      표준은 간단하며 표준 UDP 멀티 캐스트와 유사하지만 더 이상 필요하지 않으면 탁월한 기능을 갖추고 있습니다. 대역폭 적응 및 기타 개선을 지원하는 몇 가지 구현이 있습니다.

      DDS는 한 단계 전진입니다. 그것은 정말 훌륭합니다 (나는 RTI 구현을 잘 알고 있으며 훌륭하게 작동합니다). 또한 많은 기능과 디자인을 갖추고 있습니다. 신뢰할 수 있고 내결함성을 기반으로하며 open implementation이 있습니다.

      그런데 적어도 DDS와 NORM은 n^2 연결을 필요로하지 않습니다. 그들은 멀티 캐스트 udp와 같이 작동합니다.

    +0

    고마워, 나는 DDS를 사용하지는 않지만 내 문제를 해결하기 위해 모델을 사용하고있다. –

    0

    물론보다 효율적인 방법이 있습니다. UDB를 계속 사용하고 신뢰할 수있는 전송을 다시 구현하십시오. 하지만 사소하지는 않습니다. 하지만 최소한 전송 된 패킷은 전송 사이트에서 한 번만 보관하면됩니다.

    +1

    TCP를 사용하지 않는 사람들은 누군가를 바꿔 쓰려고 운명을 정한다. 모든 가능한 세계 중에서 최고는 아닙니다. –

    +0

    꽤 무지한 대답. TCP는 지점 간, 그는 방송에 대해 이야기하고 있습니다. 트래픽을 X 번 배포하지 않으려면 TCP의 일부를 다시 구현하는 것이 유일한 해결책입니다 (x는 수신기의 수임). 현실은 앤드류 B의 우스운 아이디어로 넘어 가지 않습니다. – TomTom

    1

    멀티 캐스트와 TCP는 상호 배타적입니다.

    UDP를 통한 안정적인 전달 구현은 어렵습니다. 아무도 1980 년대부터 이것을하지 않으며 성능과 BW 오버 헤드면에서 저렴한 TCP 스택만큼 좋은 것은 불가능합니다. 정정 : 때로는 수작업으로 이루어 지지만 극단적으로 길거나 좁은 파이프와 같은 이국적인 운송 수단을 통해서만 수행됩니다.

    N^2 연결은 매우 어리석지 않습니다. 1Hz 킵 얼라이브와의 연결에는 많은 비용이 들지 않습니다. 어떤 비용이 트래픽입니다. 이것이 디자인이 집중해야 할 부분입니다. 당신은 Pragmatic General Multicast을 살펴 수

    대상 플랫폼에 따라

    +0

    첫 번째 부분은 정확합니다.하지만 금융 서비스의 방대한 데이터 시나리오의 경우 시퀀스 번호가있는 UDP가 여전히 사용 방법입니다. 심지어 교환기를 사용하여 최신 구현도 사용할 수 있습니다. – weismat

    +1

    나는 동의하지 않는다. 많은 금융 응용 프로그램 (TASE 컨설팅, 기타 컨설팅)을 검토 한 경험이 풍부하기 때문에 UDP를 사용하는 팀은 유감입니다. 그들은 "대상 응용 프로그램의 시스템 오버 헤드"와 같은 관련성없는 변명을 제공 할 것입니다. –

    +0

    신뢰할 수있는 멀티 캐스트를 구현할 수있는 바디가 없다고 말하는 이유는 무엇입니까? 당신이 틀렸어 -> http://en.wikipedia.org/wiki/Reliable_multicast –

    0

    PGM은 위에서 언급 한 옵션입니다. 우리가 가진 문제는 클라이언트가 들어오는 데이터를 읽지 못하면 연결이 끊어 질 수 있다는 것입니다.

    신뢰할 수있는 '빠른 클라이언트'를 보장 할 수 없으므로 UDP 멀티 캐스트를 기반으로 신뢰성 프로토콜을 구현했습니다. 구현은 동적 연결/연결 끊기와 관련하여 완전히 일반적인 것이 아니지만 실제로 작동 할 수도 있습니다.

    http://www.equalizergraphics.com/cgi-bin/viewvc.cgi/trunk/src/lib/net/rspConnection.h?view=markup http://www.equalizergraphics.com/cgi-bin/viewvc.cgi/trunk/src/lib/net/rspConnection.cpp?view=markup

    +0

    FYI : PGM 프로토콜의 OpenPGM 구현을 사용하면 복구 할 수없는 데이터 손실을 절대로 끊지 않는 등의 프로토콜 매개 변수를 완전히 사용자 정의 할 수 있습니다. –

    0

    그냥 생각을하지만 작품은 네트워킹 프로토콜을 수행 할 필요가 않습니다 : 현재 구현을 찾을 수 있습니다. 또한 publish-subscribe 기반 모델을 사용하여이를 구현하는 방법을 살펴볼 수도 있습니다.

    네트워킹이 필요한 경우 많은 연결을 처리하거나 배달을 직접 처리해야합니다. 그 길을 가기 전에 요구 사항을 확실히 확인하십시오.

    2

    을 사용하여 Pragmatic General Multicast (PGM)을 사용하여 신뢰할 수있는 멀티 캐스트 기능을 갖춘 고속 메시징 시스템 인 0MQ을 살펴볼 필요가 있습니다.

    는 lwn.net에서 최근에 기사가 발생했습니다 :

    0MQ: A new approach to messaging

    +0

    OpenPGM을 직접 사용하거나 0MQ를 사용할지 여부는 0MQ가 IO 처리를위한 스레드 풀을 제공하고 OpenPGM은 내부 스레드가 전혀 없기 때문에 스레딩을 처리하는 방법에 따라 결정됩니다. –