2009-03-11 4 views
3

분산 구성 요소가 네트워크를 통해 비동기식 pub/sub 형식으로 서로 통신하는 응용 프로그램을 개발 중입니다.분산 된 프로세스가 비동기 적으로 통신하는 가장 좋은 방법은 무엇입니까?

나는 소켓을 통해 XML을 보내는 생각을 좋아합니다. 비동기식이며 어떤 종류의 서버도 필요하지 않으며 로컬 또는 네트워크를 통해 작동 할 수 있습니다. 내 자신의 출판/하위 메커니즘을 롤백해야 할 것입니다. 아마 너무 번거롭지는 않을 것입니다. IP 주소를 구독자의 ID로 사용할 수 있습니다. 구현 언어는 C++입니다. 좋은 결과를 얻기 위해이 방법을 사용했습니다. 그러나 더 좋은 방법이 있는지 궁금합니다. 조언을 환영합니다. . "나는 네트워크 COMMS을 위해 XML을 사용하는 인기를 이해하지

어떤 방법을

, 나는 실현 :

편집 : 난 아직 결정을하지 않은,하지만 난 protobuf에 cparcode의 의견에 관심이 있어요 프로토콜은 문제의 일부일 뿐이지 만 그 주제에 대해서는 Google의 프로토 타입도 있습니다. http://code.google.com/p/protobuf/ - caparcode (Mar11 at 1:01) "

+0

음 ... 기본적으로 비동기식 소켓입니까? 어쩌면 평행 한 우주에서? – dkretz

+0

모든 최신 소켓 라이브러리에는 asynch API가 있습니다. – Javier

+0

XML 파싱 성능, 지속적인 소켓 메모리 오버 헤드 등을주의해야합니다.하지만 다른 사람들과 마찬가지로, 과거에 해본 적이 있다면 다시 할 수 있습니다. 다른 요구 사항을 자세히 설명하는 것이 좋을 것입니다 : 네트워크에 얼마나 많은 기계가 있습니까? 요구 사항이 있습니까? – slacy

답변

3

XML을 사용하는 대신 기존 메시지 전달 프레임 워크를 사용하는 것이 가장 좋습니다. libt2n 또는 d-bus

그러나 과거에는 좋은 결과를 얻은 자신의 소켓 구현을 사용했지만 변경해야하는 이유는 없습니다. 파산하지 않은 경우 수정하지 마십시오. :)

+0

네트워크 통신을 위해 XML을 사용하는 인기를 결코 이해하지 못했습니다. 어쨌든, 그 프로토콜은 당신의 문제의 일부일 뿐이지 만, 그 주제에 대해서, 구글의 protobuf도 있습니다 : http://code.google.com/p/protobuf/ –

+0

+1 protobuf. 텍스트 기반 형식보다 훨씬 더 작고 C++ 용으로 사용하기 쉬운 API 인 Java 및 Python은 상호 운용성을 보장합니다. – Javier

+0

Dbus는 작업이 항상 같은 컴퓨터에 있으면 좋습니다. 나는 IP를 통해 약간의 작업으로 다른 컴퓨터로 이동할 수 있다고 생각하지만 실제로 그 유스 케이스에는 의미가 없다. –

0

특히 이전에 해본 적이 있고 여전히 요구 사항을 충족시키는 경우이를 고수하십시오.

+0

하지만 이제는 어떻게하는지 알고 있기 때문에 개선 할 생각입니다. – Javier

1

단지 직선 소켓 대신 consider a solution like AMQP 일 수 있습니다.

pub/sub 인터페이스에서 소켓 연결을 사용하는 경우 일반적으로 확장 가능 솔루션이 아닌 지점 간 통신을 의미합니다. AMQP는 이런 종류의 pub/sub 문제를 해결합니다. 무료이며 오픈 소스이며 작동합니다.

이미 pub/sub 문제를 해결 했으므로 스스로 해결하는 대신 작업을 활용하는 것이 좋습니다.

나는 정말 당신이에서 작업하는 환경의 어떤 종류에 따라 달라 있음을 의미하며,

OpenAMQ.을 추천합니다. AMQP는 시스템 어딘가에서 실행해야하는 AMQP 브로커 (메시지를 라우팅하는 응용 프로그램)이 필요합니다.

0

앱에 웹 서버를 삽입하는 방법은 어떻습니까? EasyHTTPD은 오픈 소스, C++이며 매우 사용하기 쉽습니다. 비동기 부분은 충분히 쉽습니다. 발신자 또는 수신자에게 새 스레드를 스핀 업합니다.

0

XML을 찾고 플랫폼 간 부팅을 원할 경우 SOAP와 같은 XML-RPC 메커니즘을 고려할 수 있습니다 (Linux의 C 서버와 win32의 C++ 클라이언트 간의 통신에 gSoap을 사용했습니다. 일단 당신이 그것을 전부 이해하면 그것은 잘 작동했습니다).

1

ActiveMQ을 살펴보십시오. 그것은 JMS 제공자이고 다른 많은 언어에서 바인딩을 가지고 있으며 여러 전송에서 작동하며 메시지에 사용하는 프로토콜을 선택합니다.

0

XML을 많이 사용하지 않고 간단하고 효율적인 무언가를 원할 경우 YAMI 라이브러리를 살펴보십시오. 오히려 사용하기 쉽고 주어진 링크에는 시작하기에 충분한 문서, 이론적 설명 및 예제가 들어 있습니다.

1

또한 RabbitMQ는 어댑터를 사용하여 XMPP, HTTP, STOMP, SMTP와 같은 다른 프로토콜을 지원하는 AMQP 브로커이기도합니다.

관련 문제