題:
用於通過LAN和Internet進行嵌入式設備通信的跨平台框架
w3therby
2014-05-05 09:44:19 UTC
view on stackexchange narkive permalink

我目前在一個項目中,我們將在具有嵌入式計算機的家用電器(例如烤箱)和移動設備(電話)之間進行通信。以下是設置的簡要摘要:

  • 嵌入式設備將運行Java,可能必須在Android上運行,但可能在Linux的某些變體中
  • 移動設備將運行C# (通過Xamarin)在iOS或Android上。
  • 當用戶不在家時,將通過Internet進行通信,因此我們需要某種代理服務器來在移動設備和設備之間路由消息(規避NAT防火牆等)。我或多或少對服務器語言/平台不了解
  • 但是,當用戶在家中並連接到其Wifi網絡時,我們希望通過LAN直接在設備和電話之間進行通信,以防萬一由於某種原因無法訪問服務器。我想這將意味著該設備必須充當服務器。
  • 嵌入式設備將向手機“實時”(大約每1-5秒)更新某些數據點(例如,溫度)。我們可能有多達數千個客戶使用代理服務器。這基本上是一種發布/訂閱模式
  • 電話應該能夠向設備發送操作請求(例如,打開/關閉,設置溫度),並且設備應該能夠成功響應/失敗消息。這基本上是一種RPC模式

是否存在支持Internet和LAN上的實時通信,發布-訂閱和RPC並同時在兩者上運行的框架Java和C#?我有幾個不錯的候選人,但是我尤其看不到在Internet上的通信與LAN上的通信之間共享協議的方法(這是否可能?)。我當前的候選清單由(按順序)組成:

  1. RabbitMQ-支持所有主要平台,內置身份驗證/ SSL / PubSub / RPC,如果沒有互聯網,我看不出任何方法可以使這兩個設備通過LAN進行通信如果我們運行的是Android設備端
  2. Websocket框架,例如SignalR,XSockets,AutoBahn或Socket.IO。這些不是.Net和Java(XSockets / AutoBahn)之間的跨平台,或者我們遇到了上面(SignalR)的LAN問題
  3. ZeroMQ-從概念上講這是可行的,但看起來很底層看起來您必須重新發明輪子才能使具有心跳監視功能的基本PubSub正常運行。
  4. 在互聯網上執行上述一項操作,並在原始套接字上自製一些協議以通過LAN進行通信(有點混亂,看來這應該已經解決了問題)
  5. ol>

    XMPP看起來也很有希望,但是從我看到的社區和文檔/示例似乎不健全的角度來看,我還讀到XMPP的性能不是實時的。 >

一 回答:
Uffe
2014-05-06 00:54:11 UTC
view on stackexchange narkive permalink

因此,這並不是真正的答案(更多信息),但是對於註釋字段來說卻很久了。

聽起來像一個有趣的項目!我只能代表XSockets,但我相信其他人會為其他技術人員填補空白。

由於XSockets具有“跨協議”通信,並且允許自定義協議作為插件,因此可以在具有TCP / IP的任何設備之間進行通信。

V 4.0即將發布,它將支持pub / sub以及rpc。有.NETMF,.NET 2.0、3.5、4.0和iOS + Android(Xamarin)的客戶端,但是由於具有跨協議功能,您可以連接原始套接字以與這些客戶端進行通訊。

我在樹莓派上在家運行XSockets服務器,並連接了Arduino和Netduinos以及一個iOS客戶端(以及一個網站和一個控制台應用程序)。即使它只是為了娛樂而不是真正的產品,它也能很好地工作。我只是在家裡檢查溫度和運動來作為概念驗證。


要解決您的問題/問題...我會選擇實時框架而不是MQ選項。有了良好的框架,以上大部分內容將非常簡單。唯一的問題就是局域網問題。沒有嘗試的經驗,但是應該可行,尤其是如果您可以在局域網上擁有一台實時服務器來接管設備回家時。

無論如何,聽起來像是一個有趣的項目。祝你好運!

很有意思!我剛剛看到了有關自定義協議的Youtube視頻。您認為為自定義協議添加授權和心跳將需要做多少工作?如果我們使用了Java的自定義協議,您是否會保持令人敬畏的狀態?
嗨,是的,協議只是連接層。如果需要,在協議中添加適當的“握手”。之後,您就可以在控制器上擁有所有其他協議的狀態。您使用哪種語言進行交流都沒有關係。
哦..我沒有全部回答。心跳是通過ping / pong(幀)內置的。當您了解使用XSockets的方式時,不要以為會花費很多時間。尤其是如果您遵循XSockets的消息模型,這將很容易。如果您構建自己的模型,它仍然可行,但是會花費更多時間。


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...