【问题标题】:Get webRTC to listen to a UDP connection获取 webRTC 以监听 UDP 连接
【发布时间】:2021-07-28 03:12:34
【问题描述】:

我一直在努力通过网络将数据从 Matlab 发送到一系列用 HTML/JS 编写的“仪表板”,基本上只是显示数据。

在 Matlab 中,我使用 uSend = udpport("datagram","IPV4","LocalHost","127.0.0.1","LocalPort",3333) 然后 write(uSend,D,"char","LocalHost",2560) 将数组 D=jsonencode([1,2,3,4,5]) 发送到端口 2560。

我当前的实现使用 NodeJS 'dgram' 来接收数据。下面的实现有效:

const dgram = require('dgram');
const socket = dgram.CreateSocket('udp4');
socket.on('message', (msg,rinfo) => {
    console.log(`Data Received: ${JSON.parse(msg)}`)
})
socket.bind(2560,"127.0.0.1")

但是:这仅适用于 NodeJS,即运行 node script.js 上方的脚本。 “仪表板”基本上需要在 chrome 浏览器上运行,dgram 无法运行(即使使用 browserify,它也不受支持)。

因此,我的手有点束缚,使用 Matlab 我实际上只能发送 UDP(它是多播),而我无法在 JS 端获取 UDP 数据。

我想知道,使用 webRTC,是否可以让它监听端口?例如类似webRTC listen to port 2560 @127.0.0.1

任何帮助将不胜感激!我对编程比较陌生,所以我可能在这里问了错误的问题。谢谢

【问题讨论】:

    标签: node.js matlab sockets udp webrtc


    【解决方案1】:

    不幸的是,WebRTC 需要的不仅仅是 UDP 端口。

    我建议改为运行一个node.js 服务器来接受传入的多播流量并像这样进行缓存。

    const dgram = require('dgram');
    const socket = dgram.CreateSocket('udp4');
    let data = [];
    socket.on('message', (msg,rinfo) => {
        data.push(JSON.parse(msg))
    })
    socket.bind(2560,"127.0.0.1")
    

    然后我会提供一个返回 JSON 的 HTTP 端点。您可以让浏览器按您选择的时间间隔轮询。

    const http = require('http');
    
    
    const server = http.createServer((req, res) => {
        response.end(JSON.stringify(data));
    })
    
    const port = 3000
    server.listen(port, () => {
        console.log(`Server listening on port ${port}`);
    })
    

    然后您可以通过 curl http://localhost:3000 进行测试。您只是在缓存数据,然后通过 HTTP 请求使其可用。

    将来我会考虑改用 Websocket。这样,服务器可以在数据可用时立即将数据推送到浏览器。使用 HTTP 端点需要浏览器按时间间隔进行请求。

    【讨论】:

      猜你喜欢
      • 2012-08-12
      • 2021-07-15
      • 1970-01-01
      • 1970-01-01
      • 2012-11-28
      • 1970-01-01
      • 2016-02-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多