2014-12-19 115 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

相关问题