【问题标题】:How to send http request via ssdp in typescript如何在打字稿中通过ssdp发送http请求
【发布时间】:2018-02-11 21:27:17
【问题描述】:

我正在学习本教程: https://sdkdocs.roku.com/display/sdkdoc/External+Control+API ...尝试通过 ssdp / http get 获取设备列表。

        let query: string = "M-SEARCH * HTTP/1.1\r\n" +
            "HOST: 239.255.255.250:1900\r\n" +
            "MAN: \"ssdp:discover\"\r\n" +
            "ST: roku: ecp\r\n\r\n";

        this.http
            .get(query)
            .map(res => res.json())
            .subscribe(
            (data) => this.devices = data,
            (err) => this.error = err);

...但我收到 404 错误(另外,localhost 被附加到字符串中):

Failed to load resource: the server responded with a status of 404 (Not Found)

http://localhost:52125/M-SEARCH%20*%20HTTP/1.1HOST:%20239.255.255.250:1900MAN:%20%22ssdp:discover%22ST:%20roku:%20ecp

【问题讨论】:

    标签: javascript angular typescript ssdp


    【解决方案1】:

    SSDP 使用 HTTPU 或 HTTP over UDP。 Node 的 HTTP 客户端只通过 TCP 发送数据。您需要使用 udp 套接字手动发送并监听数据,或者使用预先存在的库,例如 node-ssdp

    【讨论】:

    • 谢谢。你用过node-ssdp吗?我无法在我的项目中启动和运行它:TS Property 'Client' does not exist on type '{}'
    • 看起来 node-ssdp 是一个死胡同,因为它依赖于 dgram(不再存在)。我想我将不得不研究 udp 套接字。
    • 这看起来很有希望!我今晚去看看。
    • 再次感谢您的回复和想法。我还在学习这个客户端开发,我发现如果没有额外的配置,一些节点模块将无法在浏览器中工作。因此,例如:node-roku 包被编写为仅在 node.js 服务器中运行(不在 chrome 中)。这对其他人来说似乎很明显——但这是我没有考虑到的。我会将您的答案标记为解决方案,因为它是正确的。
    • 根据您所寻求的解决方案,您可能能够构建一个小型快速服务器来代理 node.js 仅模块到您的浏览器。因此,您将在 node 中构建 roku 集成,然后在 chrome 中显示一个 Web 界面来控制整个网络的 roku 设备。另一种选择是使用electron,因为它基本上是一个具有两种执行环境的浏览器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多