我目前在一個項目中,我們將在具有嵌入式計算機的家用電器(例如烤箱)和移動設備(電話)之間進行通信。以下是設置的簡要摘要:
- 嵌入式設備將運行Java,可能必須在Android上運行,但可能在Linux的某些變體中
- 移動設備將運行C# (通過Xamarin)在iOS或Android上。
- 當用戶不在家時,將通過Internet進行通信,因此我們需要某種代理服務器來在移動設備和設備之間路由消息(規避NAT防火牆等)。我或多或少對服務器語言/平台不了解
- 但是,當用戶在家中並連接到其Wifi網絡時,我們希望通過LAN直接在設備和電話之間進行通信,以防萬一由於某種原因無法訪問服務器。我想這將意味著該設備必須充當服務器。
- 嵌入式設備將向手機“實時”(大約每1-5秒)更新某些數據點(例如,溫度)。我們可能有多達數千個客戶使用代理服務器。這基本上是一種發布/訂閱模式
- 電話應該能夠向設備發送操作請求(例如,打開/關閉,設置溫度),並且設備應該能夠成功響應/失敗消息。這基本上是一種RPC模式
是否存在支持Internet和LAN上的實時通信,發布-訂閱和RPC並同時在兩者上運行的框架Java和C#?我有幾個不錯的候選人,但是我尤其看不到在Internet上的通信與LAN上的通信之間共享協議的方法(這是否可能?)。我當前的候選清單由(按順序)組成:
- RabbitMQ-支持所有主要平台,內置身份驗證/ SSL / PubSub / RPC,但如果沒有互聯網,我看不出任何方法可以使這兩個設備通過LAN進行通信如果我們運行的是Android設備端
- Websocket框架,例如SignalR,XSockets,AutoBahn或Socket.IO。這些不是.Net和Java(XSockets / AutoBahn)之間的跨平台,或者我們遇到了上面(SignalR)的LAN問題
- ZeroMQ-從概念上講這是可行的,但看起來很底層看起來您必須重新發明輪子才能使具有心跳監視功能的基本PubSub正常運行。
- 在互聯網上執行上述一項操作,並在原始套接字上自製一些協議以通過LAN進行通信(有點混亂,看來這應該已經解決了問題) ol>
XMPP看起來也很有希望,但是從我看到的社區和文檔/示例似乎不健全的角度來看,我還讀到XMPP的性能不是實時的。 >