다수의 네트워크에 걸쳐 있거나 다른 시스템에 상주 할 수있는 여러 응용 프로그램과 공유하려는 직렬 하드웨어 장치가 있습니다. 핵심 요구 사항은 시스템이 양방향 통신을 지원해야하므로 클라이언트/직렬 장치가 방화벽 및/또는 다른 네트워크 뒤에 존재할 수 있고 중앙 서버를 통해 서로 통신 (송수신) 할 수 있어야한다는 것입니다. 이 시스템의 또 다른 요구 사항은 클라이언트가 게이트웨이/직렬 장치가 오프라인/온라인인지를 결정할 수 있어야한다는 것입니다.직렬 하드웨어 장치 용 메시징 솔루션
이 직렬 장치는 패킷을 수신하고 무선 네트워크로 보낼 수 있습니다. 직렬 장치와 통신하는 소프트웨어는 Java로 작성되었으며 가능하면 100 % Java 솔루션으로 유지하려고합니다.
저는 현재 Jive 소프트웨어의 Openfire 서버 및 Smack API를 사용하여 XMPP를보고 있습니다. 이 솔루션을 사용하면 직렬 장치에서 오는 패킷이 XMPP를 통해 클라이언트에 전달됩니다. 마찬가지로 모든 클라이언트 애플리케이션은 Smack API를 통해 직렬 장치에 패킷을 보낼 수 있습니다. 패킷은 바이트 배열 일 뿐이며 크기는 약 100 바이트로 제한되어 있으므로 16 진수 문자열로 변환하여 메시지 본문의 텍스트로 보낼 수 있습니다. 시스템은 오프라인 상태 인 클라이언트/시리얼 장치를 허용해야합니다. 즉, 다시 사용할 수있게되면 자동으로 다시 연결되지만 클라이언트가 오프라인 상태이면 패킷은 삭제됩니다. 패킷은 거의 실시간으로 송수신되어야하므로 오프라인 전송은 바람직하지 않습니다. 메시징 시스템과 클라이언트 API를 통해 보안을 제공해야합니다.
다른 가능한 해결책에 대해 알고 싶습니다. 나는 JMS를 사용하는 것을 생각했지만 너무 무거워 보였고 클라이언트 및/또는 게이트웨이/시리얼 장치가 오프라인 상태인지 여부를 알 수있는 요구 사항을 지원할 지 확신하지 못합니다.
감사합니다. 좀 더 자세한 내용을 제공하기 위해 내 게시물을 업데이트했습니다. 나는 정말로 원하는 것이 가장 낮은 복잡성/코딩 노력이므로 게시물에서 "가장 적은 발자국"을 제거했습니다. – Andrew