Architecture 浏览器应如何与本地设备交互?

Architecture 浏览器应如何与本地设备交互?,architecture,cross-browser,cross-platform,Architecture,Cross Browser,Cross Platform,这应该如何实施? 用户将USB设备(“门铃”)连接到机器上 用户转到客户端的网页并单击链接 此时会出现一条通知“请按门铃” 用户按门铃,网站通知 “门铃”实际上是一个拥有自己SDK的复杂设备,它正在发回大量数据。设备制造商为Windows和OSX提供SDK。我可以为任一平台编写本机代码,以便在操作系统级别与设备交互 计划A LocalWatchdog进程在用户机器上运行 浏览器插件捕获网页事件 浏览器插件做了一些事情(使用NPAPI?)来发出本地看门狗的信号 LocalWatchdog弹出通知并

这应该如何实施?

  • 用户将USB设备(“门铃”)连接到机器上
  • 用户转到客户端的网页并单击链接
  • 此时会出现一条通知“请按门铃”
  • 用户按门铃,网站通知
  • “门铃”实际上是一个拥有自己SDK的复杂设备,它正在发回大量数据。设备制造商为Windows和OSX提供SDK。我可以为任一平台编写本机代码,以便在操作系统级别与设备交互

    计划A
  • LocalWatchdog
    进程在用户机器上运行
  • 浏览器插件捕获网页事件
  • 浏览器插件做了一些事情(使用NPAPI?)来发出本地看门狗的信号
  • LocalWatchdog
    弹出通知并获取门铃按下事件
  • LocalWatchdog
    执行操作来告诉插件门铃已按下
  • 插件告诉网站
  • 方案B
  • 该网站下载了一个在用户机器上本地运行的Java小程序
  • 小程序弹出通知
  • 小程序执行操作来捕捉门铃按下事件
  • 小程序告诉网站门铃已按下
  • 其他计划也受到欢迎,但无论如何,什么是
    某些东西

    • 任何语言都是可以接受的
    • 非琐碎的安装过程是可以接受的
    • 必须在OSX和Windows上运行。如果我必须写两遍,我会的
    • 必须与Chrome、Firefox和IE一起运行。如果我必须编写三次,我会

    它们是否需要耦合

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

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


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

    它们需要耦合吗

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

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


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

    如果您有本地进程,我会说:

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

  • 如果您有本地流程,我会说:

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

  • 我很好奇:即使使用签名的Java小程序,您也可以执行本机代码吗?是的,通过JNI。但是现在谷歌正在推广Chrome原生客户端的方法。尽管如此,还是很有趣。我很好奇:即使使用签名的Java小程序,您也可以执行本机代码吗?是的,通过JNI。但是现在谷歌正在推广Chrome原生客户端的方法。尽管如此,还是很有趣。所以如果10000个用户按了门铃,我的主机每分钟会被轮询10000次,24/7?(我误解了吗?)间隔时间由你决定。但我明白你的意思。Femi的想法还不错。所以如果10000个用户按了门铃,我的主机每分钟会被轮询10000次,24/7?(我误解了吗?)间隔时间由你决定。但我明白你的意思。Femi的想法不错。所以当页面要求
    http://localhost:9999/mydevice
    ,是否由本地进程处理?嗯,当然可能……所以当页面要求
    http://localhost:9999/mydevice
    ,是否由本地进程处理?嗯,当然可能。。。