如何使用javascript通过客户端串口进行通信?

时间:2012-07-27 04:23:17

标签: javascript node.js serial-port

最近收到了一条请求,要求通过我的网页将通信添加到客户机上通过serialport连接的设备上。

我做了一些谷歌搜索,发现带有node-serialport的node.js似乎是javascript方式。但是,就我而言,设备实际上是连接到客户端的计算机,而不是服务器。

我的问题是如何在这个意义上实现node.js?由于代码是在客户端浏览器上运行的,我是否可以在我的网页上“嵌入”node.js?

或者还有其他替代方法吗?虽然Applet和ActiveX不合适。

由于

更新 我设法说服客户从网上加载applet,所以我们将通过applet路由。谢谢大家的好消息! =)

6 个答案:

答案 0 :(得分:6)

浏览器中的 只能访问浏览器提供的API:它位于浏览器沙箱中,它(正确地)无法访问客户端文件系统或其他硬件。

这与node.js不同,node.js是一个可以访问各种其他文件系统API的服务器实现。

要“突破”浏览器,必须使用某种浏览器扩展程序。

答案 1 :(得分:3)

您必须创建一个插件,小程序或客户端应用程序,才能将数据发送到客户端的Web浏览器,然后再发送到您的服务器。

您可以创建一个小应用程序,读取创建.js文件的客户端计算机的串行端口,然后您的网页在客户端计算机上包含该“动态”创建的js文件的src,并在您的网页上获取以迂回的方式访问串口。

这就是GPSGate的工作原理:http://gpsgate.com/developer/gps_in_browser/

另见:How to read from Serial port in a webpage

基于java applet的解决方案: http://code.google.com/p/java-simple-serial-connector/

http://code.google.com/p/java-simple-serial-connector/wiki/jSSC_Terminal

答案 2 :(得分:1)

如果要从浏览器访问node.js函数,请尝试app.js

答案 3 :(得分:0)

这只能通过Active X或Java或Flash等插件来完成。 JavaScript中的代码仅与从浏览器提供的API一样强大。

想要向服务器发送HTTP请求吗? JavaScript可以做到这一点(取决于同源策略),因为浏览器具有XMLHttpRequest API。想要查询当前在操作系统上运行的进程? JavaScript无法做到这一点,因为没有浏览器提供API来查询操作系统正在运行的进程。

我所知道的浏览器没有实现任何类型的JavaScript API来执行串口操作,因此没有使用插件就无法实现。

然而,这并不排除某天可能存在这样的API:getUserMedia功能可以从摄像头或麦克风中获取数据,理论上它也可以扩展以从其他设备获取数据。 / p>

答案 4 :(得分:0)

另一个选项(具有安全权限的ActiveX或Java小程序除外)可能是Google Native Client和Pepper API,不过这是否足以访问串口,我不知道。

Firefox扩展可以包含可以访问串行端口的本机XPCOM组件,您可能会发现已经有一种方法可以从浏览器chrome访问串行端口(扩展名为),因为安全令牌和智能卡系统支持串行读者。 Firefox扩展也可用于提供下一个解决方案,这需要在系统上放置本机组件或应用程序。

您能告诉我们这里有哪些浏览器和操作系统(以及为什么要排除ActiveX和Java?)

其他人建议通过某种协议暴露串口的本机运行代理。您可以使用node,或python,或任何其他可以创建串行连接和套接字的语言。要从浏览器应用程序访问代理,您需要授予页面特殊的安全权限,然后您可以将代理设置为HTTP或WebSocket服务器。您还可以从代理服务javascript,该代理将授予脚本HTTP和WebSocket访问其作为代理的源服务器。 Google Chrome扩展程序可以使用其套接字客户端访问任何目标和端口。此外,我相信可以在Google Chrome中设置配置,以允许在某些页面或每个页面上使用此配置,同样允许网页使用本机客户端。

如果不了解您的目标,我无法确定最佳解决方案。

答案 5 :(得分:0)

读取串口数据的另一个选择是在服务器端使用sockjs和sockjs-client-node,在客户端使用sockjs-0.3.js。