在web视图上显示来自telnet接口的高速数据的最佳方式



我想在web视图上显示来自telnet接口的数据。我有一个守护进程在运行,它读取CAN总线数据,并在telnet端口上每秒产生约500行约40个字符。它是以100 Hz运行的少数消息,而大多数消息以10或5 Hz运行,所以总的来说,它约为500行/秒。我想获取每个数据包中的最新值,并将其显示在网页上。网页是本地加载的(不是通过HTTP),守护进程可能在不同的主机上,因此存在跨域通信。

以下是我尝试但失败的操作:

  1. 使用XMLHttpRequest。我可以打开连接并读取数据,但当我获得onprocress事件时,我无法清除先前值的responseText字段。我无法解析responseText中的最新值,因为它增长得很快。我也会遇到内存问题,所以这是不可能的
  2. WebSockets和Socket.IO:事实证明,它们都不能成功连接到telnet接口,因为它希望HTTP首先转换为直接套接字

所以我的问题是,我该如何最好地做到这一点?我看到了一些选择,但我相信还有更多:

  1. 在我试图连接的canlogserver守护进程中添加HTTP到套接字的转换。如何?(它是开源C,所以我可以添加它)
  2. 编写一个PHP接口,该接口通过telnet连接到守护进程,并可以通过HTTP将数据泵送回web视图。通过IP堆栈进行多次访问,这似乎效率极低<
  3. JS客户端代码上还有其他什么可以绕过我的缓冲区问题,从telnet服务器读取消息,显示数据,然后转储缓冲区的吗?我需要确保在套接字打开后,我得到所有消息,所以打开、关闭、重新打开都不起作用,因为这意味着消息会丢失

谢谢,

Tim

实际上,WebSockets有一个类似HTTP的握手,然后为每个消息都有一些框架(握手后它们不是原始套接字)。

但是,您可以使用websocketify在WebSocket客户端(浏览器)和普通TCP套接字之间架起桥梁。即使在WebSocket协议(例如Hixie)或浏览器不直接支持二进制类型(例如Typed Arrays)的情况下,Websockify也可以向TCP服务器发送/从TCP服务器接收二进制数据。

noVNC使用websocketify能够直接连接到尚未内置WebSocket支持的VNC服务器。Websockify甚至还包含了一个小测试,演示如何将一个简单的基于浏览器的终端模拟器连接到telnet服务器免责声明:我制作了webstockify和noVNC。

如果您想要没有任何插件的纯HTML5,最好的解决方案是使用WebSockets。请记住这些技术支持的浏览器,您可以在这里找到支持的浏览器和协议版本的列表。

当建立连接时,WebSockets必须进行握手,这通常是http行。之后,所有消息在接收和发送时都应该有帧。浏览器会自动执行,但您必须为守护进程实现此功能。

有现成的解决方案,这取决于你使用的语言。

如果您希望自己实现WebSockets协议,请检查Java实现的来源,并使用官方规范:RFC6455

我相信WebSockets是最好的方法。Java/Silverlight/Flash可能是另一种解决方案,但它需要更多的努力,而且可能不容易像WebSockets实现那样进行扩展,它将只是处理消息,并在另一个DIV容器中创建像DIV这样的DOM元素。

相关内容

  • 没有找到相关文章

最新更新