如何通过Web客户端访问TCP Socket

时间:2014-12-19 17:56:42

标签: node.js socket.io tcp-ip

我在嵌入式设备中有一个程序,它将xml字符串输出到套接字。嵌入式设备有lighthttpd有一个Web服务器。我想使用基于Web的客户端(没有flash / silverlight)连接到套接字并每秒拉取xml数据。

我用Socket.io查看了Node.js以获得我想做的事情,但我不清楚如何继续。通过Node.js和Socket.io文档和示例进行搜索,我看到了标准的客户端 - 服务器行为,没有关于我想要做什么。

基本上,Web服务器只是接受来自嵌入式应用程序正在输出数据的套接字上的客户端的连接。基本上,Web服务器的目的是让客户端从嵌入式应用程序正在写入的原始tcp套接字中检索数据。请指教。

2 个答案:

答案 0 :(得分:1)

我使用Websockify解决了问题,{{3}}充当TCP套接字和浏览器之间的桥梁。

html客户端将连接到websocket,Websockify将侦听websocket端口并在websocket和tcp套接字之间传输数据。

答案 1 :(得分:0)

Web浏览器能够执行HTTP请求(可以是网页请求或Ajax数据请求)和webSocket连接。如果您坚持使用股票浏览器访问权限,则需要选择这两种机制中的一种。

如果嵌入式设备中的lighthttpd Web服务器不支持webSockets,那么您的选择将是从浏览器到服务器的Ajax调用。这基本上只是一个HTTP请求,它返回与网页不同的东西(通常是JSON数据),旨在将数据从服务器提取到Web客户端。

如果lighthttpd Web服务器支持webSockets,那么您也可以使用webSocket连接来获取数据。这具有作为持久连接的优点,并且允许服务器在需要时直接向客户端发送数据(无需客户端甚至请求更多数据)(对于持续更新更有效)。

Ajax连接通常不是持久的。客户端发送Ajax请求,服务器返回答案并关闭连接。下一个请求启动一个新的Ajax请求。

Ajax请求或webSocket连接应该可以正常使用。仍在使用的所有浏览器都支持Ajax。现代浏览器(IE10及更高版本)支持WebSockets。


一旦您决定了客户端连接策略,那么您就可以在嵌入式设备上构建您的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,那么您将面临移植任务使node.js在其上运行,这可能比使用已经在设备上运行的其他开发环境(如lighthttpd)更有用。