1

我经常用谷歌搜索这个问题,但对于我到底想要做的事情是否可行仍然有点困惑。

基本上,我正在尝试向我的 Web 应用程序添加一个下拉菜单,其中列出了连接到网络的所有设备。当我说设备时,我不是在谈论所有设备。我说的是我正在使用的实现 SSDP 的某些硬件设备。我已经创建了发送 M-SEARCHes 并成功找到所有设备的 Node.js 程序,但我知道 Node.js 不是浏览器 javascript,我无法在终端上显示 Node 调用的输出浏览器(如果我错了请纠正我)。

在对其进行了更多研究之后,我意识到在浏览器上执行此类操作时的替代方法是创建某种能够执行 SSDP 并发送 M-searches 的 Chrome 扩展,或者使用 websocket 打开 websocket API(不要认为这在我的 SSDP 案例中特别有用,但我可能错了)。

鉴于我正在尝试做的事情,这些替代方案中的任何一个都有帮助。我想要做的甚至可能吗?再一次,我已经对这个主题进行了研究,但我真的无法找到明确的答案。如果可能的话,我真的很感激教程的链接或关于如何完成我想做的事情的一般想法。

我知道我最近在 StackOverflow 上发布了一些关于此的内容,但没有得到任何答案或回复,但我对这个主题进行了更多研究,感觉自己确实有更好的理解。话虽如此,我仍然很欣赏如何解决这个问题的一些方向,因为我在网上没有发现任何太有用的东西。

感谢您的时间!

4

2 回答 2

1

据我所知,Chrome 扩展程序无法访问 sockets.udp API。在 Chrome 中执行此操作的正确位置可能是 Chrome 应用程序,因为它们可以执行 UDP 多播:https ://codereview.chromium.org/12684008/ 。事实上,似乎已经有一个SSDP 应用程序......

不幸的是,Chrome 应用程序已被弃用,取而代之的是普通的网络应用程序(至少在 Chrome 操作系统之外),而且正如您发现的那样,您还不能通过普通的网络 API 执行 SSDP。套接字 API 正在运行中,但不知道它们是否以及何时可以解决允许随机 Web 应用程序执行诸如加入本地多播组之类的事情所固有的安全问题。

Websockets 不太可能提供你需要的东西。

于 2016-09-07T11:12:20.837 回答
0

这是可能的。

Node.js 不是浏览器 javascript,我无法在浏览器的终端中显示 Node 调用的输出

他们都运行Javascript。如果无法访问终端,请在终端中运行您的 nodjs 或将输出通过管道传输到文本文件。在这两种情况下,console.log() 都应该能够打印出来。

对于客户端和服务器端的 SSDP,请使用:https ://www.npmjs.com/package/node-ssdp

您无需专门使用 Chrome 应用程序。您可以使用基于 Javascript 的跨平台框架(如 Electron)编写应用程序。它将成为一个功能齐全的“网络”应用程序,适用于 PC 和移动设备,您可以使用 Cordova 等。

于 2017-06-14T14:45:06.057 回答