2008-09-18 7 views
1

다수의 네트워크에 걸쳐 있거나 다른 시스템에 상주 할 수있는 여러 응용 프로그램과 공유하려는 직렬 하드웨어 장치가 있습니다. 핵심 요구 사항은 시스템이 양방향 통신을 지원해야하므로 클라이언트/직렬 장치가 방화벽 및/또는 다른 네트워크 뒤에 존재할 수 있고 중앙 서버를 통해 서로 통신 (송수신) 할 수 있어야한다는 것입니다. 이 시스템의 또 다른 요구 사항은 클라이언트가 게이트웨이/직렬 장치가 오프라인/온라인인지를 결정할 수 있어야한다는 것입니다.직렬 하드웨어 장치 용 메시징 솔루션

이 직렬 장치는 패킷을 수신하고 무선 네트워크로 보낼 수 있습니다. 직렬 장치와 통신하는 소프트웨어는 Java로 작성되었으며 가능하면 100 % Java 솔루션으로 유지하려고합니다.

저는 현재 Jive 소프트웨어의 Openfire 서버 및 Smack API를 사용하여 XMPP를보고 있습니다. 이 솔루션을 사용하면 직렬 장치에서 오는 패킷이 XMPP를 통해 클라이언트에 전달됩니다. 마찬가지로 모든 클라이언트 애플리케이션은 Smack API를 통해 직렬 장치에 패킷을 보낼 수 있습니다. 패킷은 바이트 배열 일 뿐이며 크기는 약 100 바이트로 제한되어 있으므로 16 진수 문자열로 변환하여 메시지 본문의 텍스트로 보낼 수 있습니다. 시스템은 오프라인 상태 인 클라이언트/시리얼 장치를 허용해야합니다. 즉, 다시 사용할 수있게되면 자동으로 다시 연결되지만 클라이언트가 오프라인 상태이면 패킷은 삭제됩니다. 패킷은 거의 실시간으로 송수신되어야하므로 오프라인 전송은 바람직하지 않습니다. 메시징 시스템과 클라이언트 API를 통해 보안을 제공해야합니다.

다른 가능한 해결책에 대해 알고 싶습니다. 나는 JMS를 사용하는 것을 생각했지만 너무 무거워 보였고 클라이언트 및/또는 게이트웨이/시리얼 장치가 오프라인 상태인지 여부를 알 수있는 요구 사항을 지원할 지 확신하지 못합니다.

답변

1

좀 더 자세히 설명해야합니다 ... 고객에게 보장 된 배송이 필요합니까? 오프라인 게재는 어떻게됩니까? 이 부분이 더 큰 시스템입니까? 암호화가 필요합니까? 보안?

최소 설치 공간을 원하면 SocketServer, 소켓 및 직렬화를 사용하여 데이터를 전송해야합니다. 그러나 일반적으로 신뢰도, 전달 보증, 보안, 관리 등을 포함하는 언급 한 타사 솔루션의 모든 이점을 잃게됩니다.

저는 개인적으로 JMS를 사용 하겠지만 그 이유는 익숙하기 때문입니다. 사실상 아무런 구성없이 즉시 사용할 수있는 독립 실행 형 서버가 많이 있습니다. 그들은 모두 보장 된 전달, 보안, 암호화 및 기타 여러 가지 사용하기 쉬운 기능을 제공합니다. JMS 게시자 또는 구독자 코딩은 매우 쉽습니다.


업데이트 : 당신은 코드에서 가장 용이성을 원하는 경우 이, 그때는 타사 솔루션에 보일 것이다. Smack/XMPP를 살펴보면 API는 요청한 기능에 대한 JMS보다 약간 쉬워 보입니다. 여전히 서버 등을 설정/구성해야합니다.

Smack API에는 필요하지도 않은 많은 수하물이 있지만, 모든 채팅/메신저 기능으로 인해보다 직관적 인 "개념"이 있습니다. 개념.

나는 아직도 OpenJMS 또는 ActiveMQ을 볼 것입니다. 나는 JMS가 XMPP를 아는 것보다 미래에 더 가치가있을 것이라고 생각한다. Getting Started 설명서 또는 Sun Tutorial을보고 코딩의 양을 확인하십시오. JMS 용어로, 직렬 포트 응용 프로그램이 메시지를 각각 수신하고 전송하는 관리 대상 "주제"및 "대기열"이 필요합니다. 모든 고객은 주제에 대한 가입을 열고 발신 메시지를 대기열로 보냅니다. 메시지를 보낼 때 전달 모드가 비 지속적이어야합니다.

+0

감사합니다. 좀 더 자세한 내용을 제공하기 위해 내 게시물을 업데이트했습니다. 나는 정말로 원하는 것이 가장 낮은 복잡성/코딩 노력이므로 게시물에서 "가장 적은 발자국"을 제거했습니다. – Andrew

1

지니가 직업에 적합 할 수도 있습니다. 멀티 캐스트를 사용할 수있는 분산 환경에서는 실제로 잘 작동하지만 유니 캐스트에서도 작동하며 매우 빠릅니다. 원격 서비스뿐만 아니라 원격 이벤트 및 분산 트랜잭션도 필요할 경우 제공합니다. 단점은 Java에서만 작동한다는 것입니다.

내가 일하는 곳에서, Jini는 1000 대가 넘는 시스템이있는 인프라에서 사용되고, 각 시스템은 장치에 액세스하는 데 사용되는 원격 서비스를 제공하여 시스템 직렬 포트에 연결합니다.

+0

지니를 살펴 보겠습니다. 감사 – Andrew

0

Smack API를 통해 XMPP를 사용하여 작업을 마쳤습니다. 이 결정을 내리게 한 것은 현재 상태 (클라이언트 온라인/오프라인)와 강력한 연결 처리 (기본 연결이 끊어진 경우 자동으로 다시 연결)에 대한 기본 지원이었습니다. XMPP의 또 다른 이점은 Google 토크와 호환되므로 서버를 설정할 필요가 없다는 것입니다. 제안 해줘서 고마워. 누군가 관심이있는 경우 Google 코드에 코드를 발표했습니다. http://code.google.com/p/xbee-xmpp/

관련 문제