2014-12-19 114 views
0

我在嵌入式設備中輸出一個xml字符串到套接字的程序。嵌入式設備有lighthttpd有一個Web服務器。我想使用基於Web的客戶端(無需flash/silverlight)連接到套接字並每秒抽取xml數據。如何通過網絡客戶端訪問TCP套接字

我使用Socket.io查看Node.js以獲得我想要做的事,但我不清楚如何繼續。通過Node.js和Socket.io文檔和示例進行搜索我看到了標準的客戶端 - 服務器行爲,沒有涉及到我想要做的事情。

基本上,Web服務器只是在那裏接受來自嵌入式應用程序輸出數據的套接字上客戶端的連接。基本上,Web服務器的目的是讓客戶端從嵌入式應用程序寫入的原始tcp套接字中檢索數據。請指教。

回答

0

我解決了這個問題,使用Websockify,它充當TCP套接字和瀏覽器之間的橋樑。

html客戶端將連接到websocket,Websockify將偵聽websocket端口並在websocket和tcp套接字之間傳輸數據。

0

Web瀏覽器可以執行HTTP請求(可以是網頁請求或Ajax數據請求)和webSocket連接。如果您堅持使用股票瀏覽器訪問權限,則需要選擇這兩種機制中的一種。

如果嵌入式設備中的lighthttpd Web服務器不支持webSockets,那麼您的選擇將是從瀏覽器到服務器的Ajax調用。這基本上只是一個HTTP請求,它返回的內容與網頁(通常是JSON數據)有所不同,用於從服務器獲取數據到Web客戶端。

如果lighthttpd Web服務器確實支持webSocket,那麼您也可以使用webSocket連接來獲取數據。這具有持久連接的優點,並允許服務器在需要時直接向客戶端發送數據(無需客戶端甚至請求更多數據)(對於持續更新而言更高效)。

Ajax連接通常不是持久的。客戶端發送Ajax請求,服務器返回答案並關閉連接。下一個請求開始一個新的Ajax請求。

Ajax請求或webSocket連接應該可以正常工作以供您使用。所有仍在使用的瀏覽器都支持Ajax。現代瀏覽器支持WebSockets(IE10及更高版本)。


一旦你決定在一個客戶端連接策略,那麼你會構建擔任瀏覽器和嵌入式設備上的數據之間的中間人在嵌入式設備上的Web應用程序。它將從嵌入式設備收集適當的數據,然後將其發送給連接並請求數據的瀏覽器客戶端。


我不確定你爲什麼提到node.js。在這種情況下,它將用作Web服務器和構建應用程序的環境,以及從您的設備收集數據並將其提供給請求的Web瀏覽器的邏輯,但聽起來您已經爲此使用了lighthttpd。就個人而言,如果它適用於您的環境,我推薦使用node.js。結合socket.io(用於webSocket支持),將瀏覽器直接連接到嵌入式設備是一種非常好的方式。我有一個用node.js編寫並在Raspberry Pi上運行的閣樓風扇控制器。 node.js應用程序監視溫度探測器並控制轉換閣樓風扇和node.js的繼電器,還可以作爲Web服務器來管理和監視node.js。總而言之,如果您已經瞭解並喜歡使用Javascript進行編程,並且有豐富的附加模塊來擴展其通過NPM提供的功能,那麼這是一個非常漂亮的環境。但是,如果您的嵌入式設備不是已支持node.js的常用設備,或者它上面沒有node.js,那麼您將面臨移植任務以製作節點。js在其上運行,這可能比使用已經在設備上運行的其他一些開發環境(如lighthttpd)更有用。

+0

我很抱歉沒有讓我的問題更清楚。我剛剛提到了node.js作爲一個可能的例子。我需要做的是從Web瀏覽器連接到一個原始的TCP套接字。我通過在Web服務器和html客戶端之間使用橋接來解決問題。 – Jabe

相關問題