在 Express 中监听 UDP 消息

2023-12-24

我有一个使用 Express 的基本 Node.js 服务器。它需要能够处理 TCP 消息以及 UDP 消息。 TCP 部分已启动并运行良好,但现在我需要集成一种嗅探 UDP 消息的方法。我尝试使用以下方法将处理程序添加到过滤器堆栈中dgram套接字,但尚未成功。

const express = require('express');
const dgram = require('dgram');

// ...

const app = express();
const dgramSocket = dgram.createSocket('udp4');

// ...

app.use((req, res, next) => {
  dgramSocket.on('listening', () => {
    let addr = app.address();
    console.log(`Listening for UDP packets at ${addr.address}:${addr.port}`);
  });

  dgramSocket.on('error', (err) => {
    console.log(`UDP error: ${err.stack}`);
  });

  dgramSocket.on('message', (msg, rinfo) => {
    console.log(`Received UDP message`);
  });

  next();

}

// ...

app.set('port', 8080);

当我运行我的服务器时,其他一切都正常,但我的dgram部分甚至不说他们正在听。我对 Node 不太熟悉,对 UDP 更不熟悉,所以我可能完全走错了路。有人能够将 UDP 消息传递与 Express 服务器集成吗?


看起来我对端口的使用做了一些不幸的假设。事实证明这可以很简单地完成,但是您必须侦听两个不同的端口:

const express = require('express');
const dgram = require('dgram');

// ...

const app = express();

// ... filter stack ...

const socket = dgram.createSocket('udp4');

socket.on('listening', () => {
  let addr = socket.address();
  console.log(`Listening for UDP packets at ${addr.address}:${addr.port}`);
});

socket.on('error', (err) => {
  console.error(`UDP error: ${err.stack}`);
});

socket.on('message', (msg, rinfo) => {
  console.log('Recieved UDP message');
});

app.set('port', 8080); // listen for TCP with Express
socket.bind(8082);     // listen for UDP with dgram

奇迹般有效。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Express 中监听 UDP 消息 的相关文章

随机推荐