【问题标题】:how to communicate through serial port on client side using javascript?如何使用javascript通过客户端的串行端口进行通信?
【发布时间】:2014-07-31 17:16:29
【问题描述】:

最近收到一个请求,通过我的网页向通过客户端机器上的串行端口连接的设备添加通信。

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

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

或者有没有其他方法可以做到这一点?不过,Applet 和 ActiveX 不适用。

谢谢

更新: 已经设法说服客户端从 Web 加载小程序,所以我们将通过小程序路由。感谢大家提供的重要信息! =)

【问题讨论】:

标签: javascript node.js serial-port


【解决方案1】:

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

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

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

【讨论】:

  • 如果客户端的机器和服务器在同一个网络上怎么办?有没有办法使用 node.js 和 net 从中提取数据? node.js net module,
【解决方案2】:

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

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

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

参见此处:How to read from Serial port in a webpage

还有一个基于 Java 小程序的解决方案: http://code.google.com/p/java-simple-serial-connector/

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

      据我所知,没有浏览器实现任何类型的 JavaScript API 来执行串行端口操作,因此不使用插件就无法做到这一点。

      不过,这并不排除有朝一日这样的 API 存在的可能性:getUserMedia 函数可以从摄像头或麦克风中获取数据,理论上它也可以扩展为从其他设备获取数据。

      【讨论】:

        【解决方案5】:

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

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

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

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

        在不了解您的目标的情况下,我无法确定最佳解决方案是什么。

        【讨论】:

        • ActiveX 和 Java 被排除在外的原因是因为在客户端机器上运行的“中间层”编程。
        【解决方案6】:

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

        【讨论】:

          猜你喜欢
          • 2015-02-16
          • 1970-01-01
          • 1970-01-01
          • 2023-04-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-01-18
          相关资源
          最近更新 更多