TCP/IP 소켓을 사용하여 여러 대상에 동일한 메시지를 보내는 최상의 방법을 찾고 있습니다. Windows에서 기존 VS 2010 C++ 응용 프로그램으로 작업하고 있습니다. 가능하다면 이미 해결 된 많은 복잡성을 가진 표준 라이브러리/디자인 패턴 접근 방식을 사용하기를 원합니다.소켓을 사용하여 여러 대상에 동일한 데이터를 보내는 최상의 방법 찾기
다음은 내가 생각하고있는 한 가지 접근 방식입니다. 하나의 주 스레드가 데이터베이스에서 메시지를 검색하고이를 일종의 스레드 안전 큐에 추가합니다. 또한 응용 프로그램에는 일부 대상 서버에 대한 각 클라이언트 소켓 연결에 대해 하나의 스레드가 있습니다. 이 쓰레드 각각은 쓰레드 안전 큐에서 읽은 다음 tcp/ip 소켓을 통해 메시지를 보냅니다. 이보다 더 좋고/더 간단 할 수도 있고 더 강력 할 수도 있습니다.
내가 주로 염려해야하는 문제는 대기 시간입니다. 목적지는 어디든지있을 수 있으며 소켓 연결과 소켓 연결간에 상당한 대기 시간이있을 수 있습니다. 메시지는 모든 대상에 대해 정확한 FIFO 순서로 이동해야합니다.
또한 하나의 대상이 기본 대상으로 간주됩니다. 모든 메시지는 예외없이 예외없이이 대상에 도착해야합니다. 기본이 아닌 다른 목적지의 경우 메시지는 단지 사본이며 기본이 아닌 대상이 몇 개의 메시지를받지 않으면 절대적으로 중요하지 않습니다. 어느 시점에서든 기본 대상이 아닌 기본 대상 중 하나가 기본 대상이 될 수 있습니다. 대상 중 하나가 너무 늦게 떨어지면 해당 스레드는 기본 대상을 따라 잡아야하지만 일부 메시지는 건너 뜁니다.
제안 사항을 찾고 있습니다. 지금까지의 예비 연구에서, 나의 상황은 단일 생산자와 다수의 소비자 패턴 또는 Java의 마스터 작업자 패턴과 비슷한 것으로 보인다.
Windows에서이 기능을 C++에서 구현해야하며 응용 프로그램은 기존에 정의 된 프로토콜을 사용하여 TCP/IP 소켓을 사용해야합니다.
아무런 도움을받지 못 하셨다면 큰 도움이 될 것입니다.
[기존의 정의 된 protol]의 의미는 모르지만 [ZeroMQ] (http://zeromq.org)를 살펴보십시오. –
TCP는 이미 많은 것을 수행합니다 : 보장 된 FIFO 순서, 시작 및 길기 기본 대상 (또는 모든 대상)에 대한 연결이 유지되면 해당 대상의 피어는 전송 된 모든 데이터를 수신합니다. 지연이 왜 당신의 설명에서 그런 우려인지는 분명하지 않습니다. 예를 들어 주문에 영향을 미치지 않습니다. – EJP
"기존에 정의 된 프로토콜"은 응용 프로그램이 인터페이스/프로토콜이 이미 정의 된 서버와 통신하고 있다는 것을 의미합니다. TCP/IP의 의미가 필요합니다. –