2008-09-18 71 views
1

我有一個串行硬件設備,我想與多個應用程序共享,這些應用程序可能駐留在多個網絡中的不同計算機上或跨越多個網絡。一個關鍵的要求是系統必須支持雙向通信,這樣客戶端/串行設備可以存在於防火牆和/或不同網絡之後,並且仍然可以通過中央服務器相互通信(發送和接收)。系統的另一個要求是客戶端必須能夠確定網關/串行設備是否離線/在線。串行硬件設備的消息傳遞解決方案

該串行設備能夠接收和發送數據包到無線網絡。與串行設備通信的軟件是用Java編寫的,如果可能的話,我想讓它保持100%的Java解決方案。

我目前正在使用Jive軟件的Openfire服務器和Smack API查看XMPP。使用這種解決方案,串行設備上的數據包將通過XMPP傳送到客戶端。同樣,任何客戶端應用程序都可以通過Smack API將數據包發送到串行設備。數據包只是字節數組,大小限制在100字節左右,所以它們可以轉換爲十六進制字符串並作爲消息正文中的文本發送。系統應該能夠容忍客戶端/串口設備處於脫機狀態,這意味着它們會在再次可用時自動重新連接,但如果客戶端處於脫機狀態,數據包將被丟棄。數據包必須實時發送和接收,因此不希望離線傳送。安全性應由消息系統提供,並提供客戶端API。

我想聽聽其他可能的解決方案。我想過使用JMS,但它似乎有點太重量級,我不確定它是否支持瞭解客戶端和/或網關/串行設備是否脫機的要求。

回答

1

你真的需要提供更多的細節......客戶需要保證交付嗎?離線傳遞怎麼樣?這是更大系統的一部分嗎?你需要加密嗎?安全?

如果你想盡可能縮小佔用空間,那麼應該使用SocketServer,套接字和序列化來傳輸數據。但是,那麼你就失去了你提到的第三方解決方案的所有優點,通常包括可靠性,交付保證,安全性,管理等。

我個人會使用JMS,但那是因爲我熟悉它。有許多獨立的服務器可以通過幾乎沒有配置的方式進行部署。它們都提供有保證的交付,一些安全性,加密和一些其他易於使用的功能。編寫JMS發佈者或訂閱者非常簡單。


更新: 如果你想在最方便的編碼,然後我會看看第三方解決方案。看看Smack/XMPP,對於您要求的功能而言,API似乎比JMS容易一些。您仍然需要安裝/配置服務器等。

Smack API還有很多額外的包袱,您不需要它們,但其「概念」更直觀,因爲它的所有聊天/ IM概念。

我仍然會看OpenJMSActiveMQ。我認爲與瞭解XMPP相比,未來JMS將會更有價值。看看他們的Getting Started文檔或Sun Tutorial看看有多少編碼涉及。按照JMS的說法,您需要一個管理的「主題」和一個「隊列」,串行端口應用程序將分別接收和發送消息。您的所有客戶端都將打開該主題的訂閱並將其出站郵件發送到隊列。當您發送消息時,其傳送模式應該是非持久性的。

+0

感謝您的迴應。我已更新我的帖子以提供更多詳細信息。我從帖子中刪除了「最低限度」的措詞,因爲我真正想要的是最低的複雜性/編碼工作。 – Andrew 2008-10-05 19:09:26

1

Jini可能適合這份工作。它在多播可用的分佈式環境中運行得非常好,但它也可用於單播,速度相當快。它不僅提供遠程服務,而且還提供遠程事件和分佈式事務(如果您需要的話)。缺點是它只適用於Java。

在我工作的地方,Jini用於1000臺以上機器的基礎架構,每臺機器都提供用於訪問設備的遠程服務,連接到機器串行端口。

+0

我會看看Jini。謝謝 – Andrew 2008-10-05 19:10:06

0

我最終通過Smack API使用XMPP。讓我做出這個決定的原因是它的本地支持(在線/離線客戶端)和強大的連接處理(如果底層連接斷開,它會自動重新連接)。 XMPP的另一個好處是它與Google Talk兼容,所以我不需要設置服務器。感謝您的建議。如果有人有興趣,我已經發布了谷歌代碼http://code.google.com/p/xbee-xmpp/