在Express中侦听UDP消息 [英] Listen for UDP messages in Express
问题描述
我有一个使用Express的基本Node.js服务器.它需要能够处理TCP消息和UDP消息. TCP部分运行良好,但是现在我需要集成一种嗅探UDP消息的方法.我尝试使用dgram
套接字将处理程序添加到过滤器堆栈中,但是没有成功.
I have a basic Node.js server using Express. It needs to be able to handle TCP messages as well as UDP messages. The TCP part is up and running great, but now I need to integrate a way to sniff out the UDP messages. I've tried adding a handler to the filter stack using a dgram
socket, but it hasn't been successful.
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服务器集成?
When I run my server everything else works, but my dgram
parts don't even say that they're listening. I'm not too familiar with Node and even less so with UDP, so I might be on the complete wrong track. Has anyone been able to integrate UDP messaging with an Express server?
推荐答案
好像我对端口的使用做了一些不幸的假设.事实证明,这可以非常简单地完成,但是您必须在两个不同的端口上进行监听:
Looks like I made some unfortunate assumptions about the usage of ports. It turns out this can be done quite simply, but you have to listen on two different ports:
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
像魅力一样工作.
这篇关于在Express中侦听UDP消息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!