我想在 Web 视图上显示来自 telnet 接口的数据。我正在运行一个守护进程,它读取 CAN 总线数据并在 telnet 端口上每秒生成约 500 行约 40 个字符。其中一些消息以 100 Hz 运行,而大多数其他消息以 10 或 5 Hz 运行,因此总计约为 500 条/秒。我想获取每个数据包中的最新值并将其显示在网页上。网页是在本地加载的(不是通过 HTTP),并且守护进程可能位于不同的主机上,因此存在跨域通信。
这是我尝试过但失败的事情:
- 使用 XMLHttpRequest。我可以打开连接并读取数据,但当我收到 onprogress 事件时,无法清除先前值的responseText 字段。我无法解析responseText 的最新值,因为它增长得非常快。我还会遇到内存问题,所以这是不行的。
- WebSockets 和 Socket.IO:在连接到 telnet 接口方面都没有被证明是成功的,因为它首先期望 HTTP 然后转换为直接套接字。
所以我的问题是,我怎样才能最好地实现这一目标?我看到了一些选项,但我确信还有更多:
- 在我尝试附加的 canlogserver 守护进程中添加 HTTP 到套接字转换。如何? (它是开源C,所以我可以添加它)
- 编写一个 PHP 接口,通过 telnet 连接到守护进程,并可以通过 HTTP 将数据返回到 Web 视图。对于多次通过 IP 堆栈的行程来说,这似乎效率极低。
- JS 客户端代码上还有什么可以绕过我的缓冲区问题并从 telnet 服务器读取消息、显示数据然后转储缓冲区吗?我需要确保我得到all一旦套接字打开,消息就会丢失,因此打开、关闭、重新打开将不起作用,因为这意味着消息会丢失。
Thanks,
Tim
实际上,WebSocket 具有类似 HTTP 的握手,然后为每条消息提供一些帧(握手后它们不是原始套接字)。
但是,您可以使用网络套接字 https://github.com/kanaka/websockify在 WebSocket 客户端(浏览器)和普通 TCP 套接字之间建立桥梁。即使 WebSocket 协议(例如 Hixie)或浏览器不直接支持二进制类型(例如类型化数组),Websockify 还允许您向 TCP 服务器发送/接收二进制数据。
noVNC https://github.com/kanaka/noVNC使用 websockify 能够直接连接到尚未内置 WebSocket 支持的 VNC 服务器。 Websockify 甚至包含一个小测试,演示如何将一个简单的基于浏览器的终端模拟器连接到 telnetd 服务器。免责声明:我做了websockify和noVNC。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)