2012-04-04 14 views
3

我想要在Web視圖上顯示遠離Telnet界面的數據。我有一個運行的守護程序,它讀取CAN總線數據並生成約500行,每秒約40個字符到一個telnet端口。這是一些以100赫茲運行的消息,大多數運行在10或5赫茲的消息,因此總計約爲500 /秒。我想抓住每個數據包中的最新值並將其顯示在網頁上。該網頁在本地加載(不通過HTTP),守護進程可能位於不同的主機上,因此存在跨域通信。在Web視圖上顯示來自Telnet界面的高速數據的最佳方式?

這是我嘗試和失敗的事:

  1. 使用XMLHttpRequest。我可以打開連接並讀取數據,但是當我得到onprogress事件時,我無法清除先前值的responseText字段。我無法解析responseText的最新價值,因爲這種增長非常快。我也會遇到記憶問題,所以這是一個不行。
  2. 的WebSockets和Socket.IO:既不已經證明是成功的連接到一個遠程登錄界面,因爲它預計HTTP起初,然後轉換爲直接套接字。

所以我的問題是,我該如何最好地實現這一點?有些選項我看,但我敢肯定有更多:

  1. 添加HTTP套接字在canlogserver守護我試圖連接到轉換。怎麼樣? (它是開源的C,所以我可以添加到它)
  2. 寫一個PHP接口,通過telnet連接到後臺程序,並且可以通過HTTP數據泵回Web視圖。這通過IP棧多次訪問似乎非常低效。 <
  3. 任何的JS客戶端代碼繞過我的緩衝問題和讀取Telnet服務器,顯示數據信息,然後轉儲緩衝區別的嗎?一旦套接字打開,我需要確保我獲得全部消息,因此打開,關閉,重新打開將不起作用,因爲這將意味着消息丟失。

謝謝,

回答

2

實際上,的WebSockets具有類似於HTTP的握手,然後有一些成幀爲每個消息(它們不是握手之後原始套接字)。

但是,你可以使用一個websockify的WebSocket客戶端(瀏覽器)和一個普通的TCP套接字之間的橋樑。即使WebSocket協議(例如Hixie)或瀏覽器不直接支持二進制類型(例如Typed Arrays),Websockify也允許您向/從TCP服務器發送/接收二進制數據。

noVNC使用websockify能夠直接連接到目前還不具備內建的WebSocket支持VNC服務器。 Websockify甚至包含一個小測試,它演示了將簡單的基於瀏覽器的終端仿真器連接到telnetd服務器。 免責聲明:我做了websockify和noVNC。

1

最好的解決方案是使用WebSockets,如果你想要純HTML5沒有任何插件。 請記住支持這種技術的瀏覽器,您可以在這裏找到list of supported browsers和協議版本。

的WebSockets有建立連接時,做握手,這是通常的HTTP線。 之後,所有的消息應該有框架,當收到和什麼時候發送。瀏覽器會自動執行此操作,但您必須爲守護程序實現此功能。

有準備好的解決方案,取決於您使用的語言。

如果你希望通過你的自我實現的WebSockets協議,檢查Java實現,例如源,並利用官方規範:RFC6455

我認爲,WebSockets的是最好的一段路要走。 Java/Silverlight/Flash可能是其他解決方案,但它需要更多的努力,並且可能不像WebSockets實現那樣容易擴展,只會處理消息並在接收到消息的另一個DIV容器中創建DIV元素等DOM元素。

相關問題