最近收到了一条请求,要求通过我的网页将通信添加到客户机上通过serialport连接的设备上。
我做了一些谷歌搜索,发现带有node-serialport的node.js似乎是javascript方式。但是,就我而言,设备实际上是连接到客户端的计算机,而不是服务器。
我的问题是如何在这个意义上实现node.js?由于代码是在客户端浏览器上运行的,我是否可以在我的网页上“嵌入”node.js?
或者还有其他替代方法吗?虽然Applet和ActiveX不合适。
由于
更新 我设法说服客户从网上加载applet,所以我们将通过applet路由。谢谢大家的好消息! =)
答案 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。