【问题标题】:How should a browser interact with a local device?浏览器应该如何与本地设备交互?
【发布时间】:2011-08-13 11:44:46
【问题描述】:

这应该如何实现?

  1. 用户的机器上连接了一个 USB 设备(“门铃”)。
  2. 用户转到客户端的网页并单击一个链接。
  3. 出现“请按门铃”的通知。
  4. 用户按门铃,通知网站。

“门铃”实际上是一个带有自己的 SDK 的复杂设备,它正在发回一大块数据。设备制造商提供适用于 Windows 和 OSX 的 SDK。我可以为任一平台编写本机代码,以便在操作系统级别与设备进行交互。

A计划

  1. LocalWatchdog 进程在用户机器上运行。
  2. 浏览器插件捕获网页事件
  3. 浏览器插件做了某事(使用 NPAPI?)来发信号 LocalWatchdog
  4. LocalWatchdog 弹出通知并获取按门铃事件
  5. LocalWatchdog 做了某事来告诉插件门铃已被按下。
  6. 插件告诉网站。

B计划

  1. 网站下载一个 Java 小程序,该小程序在用户机器上本地运行。
  2. 小程序弹出通知。
  3. 小程序执行某些操作来捕捉门铃按下事件。
  4. 小程序告诉网站门铃已按下。

欢迎其他计划,但无论如何,某些东西是什么?

  • 可接受任何语言。
  • 不平凡的安装过程是可以接受的。
  • 必须在 OSX 和 Windows 上运行。如果我必须写两次,我会的。
  • 必须在 Chrome、Firefox 和 IE 上运行。如果我必须写三遍,我会的。

【问题讨论】:

  • 我很好奇:即使使用签名的 Java 小程序,您也可以执行本机代码吗?
  • 是的,通过 JNI。但现在 Google 正在推动 Chrome Native Client 方法。
  • Meh 本地客户端。不过很有趣。

标签: architecture cross-browser cross-platform


【解决方案1】:

如果你有一个本地进程,我会说:

  1. 运行与硬件通信并使用适当的跨域 XML 文件的本地网络服务器。
  2. 使用 Ajax 调用请求从浏览器与其对话并请求按下按钮
  3. 当本地网络服务器收到请求时,向硬件发送适当的消息(我假设它是一些 USB HID 类型的东西)。
  4. 在浏览器中向用户发出信号,然后再次向本地网络服务器打开长轮询请求并等待响应。
  5. 如果用户点击按钮,则将数据返回给浏览器请求。
  6. 利润(我们希望)。

【讨论】:

  • 那么当页面请求http://localhost:9999/mydevice时,本地进程会处理吗?嗯,当然可能……
【解决方案2】:

它们是否需要耦合?

浏览器上的用户单击链接。这会在后端系统上对事件进行排队。

独立地,主机上的 LocalWatchdog 进程通过 REST API 或类似的方式定期(每分钟?)轮询后端如果有待处理的操作,它会确认这一点(并将其从服务器中删除),然后弹出对话框“按门铃按钮”。

浏览器和硬件必须在用户机器范围内交互的任何解决方案都将是一个非常令人沮丧的练习,尤其是对于要支持的浏览器列表。

【讨论】:

  • 因此,如果 10,000 个用户有门铃,我的主机每分钟 24/7 轮询 10,000 次? (我理解错了吗?)
  • 时间间隔由您决定。但我明白你的意思。 Femi 的想法不错。
猜你喜欢
  • 2011-08-15
  • 1970-01-01
  • 2012-03-31
  • 2020-03-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-11
  • 2013-08-27
  • 1970-01-01
相关资源
最近更新 更多