想了一晚上的bug 烦死了
用egg 创建一个socket udp服务
首先创建一个service/udp.js
// app/service/udp.js
const dgram = require('dgram');
module.exports = app => {
return {
startServer() {
const server = dgram.createSocket('udp4');
server.on('error', err => {
console.log(`UDP server error:\n${err.stack}`);
server.close();
});
server.on('message', (msg, rinfo) => {
console.log(`Received: ${msg} from ${rinfo.address}:${rinfo.port}`);
// 在这里处理收到的消息,并可以进行相应的回复
// ...
// 示例回复消息
const responseMsg = 'Hello, client!';
server.send(responseMsg, 0, responseMsg.length, rinfo.port, rinfo.address, (err) => {
if (err) {
console.log(`UDP server send error:\n${err.stack}`);
}
});
});
server.on('listening', () => {
const address = server.address();
console.log(`UDP server listening on ${address.address}:${address.port}`);
});
// 设置服务监听的端口
const port = 12345;
server.bind({
port:port,
exclusive: true,
});
console.log("shuaishuai")
},
};
};
一个坑!!!!!!!! 正常 js 文件 运行的时候 server.bind(port) 就可以正常运行
但是在 egg 运行的时候就 需要加上 exclusive: true,
server.bind({
port:port,
exclusive: true,
});
然后在app.js中 调用就可以了
app.beforeStart(async() => {
await app.serviceClasses.udp.startServer()
});