带有 NodeJS dgram 的 PM2
PM2 with NodeJS dgram
我正在尝试 运行 使用 pm2 的 NodeJS 应用程序(udp_recv)。
该应用程序通过 pm2 启动和 pm2 保存启动。
然而,dgram 给我一个错误说 -
server error:
1|udp_recv | Error: bind EADDRNOTAVAIL 192.168.0.9:7001
1|udp_recv | at state.handle.lookup (dgram.js:242:18)
1|udp_recv | at process._tickCallback (internal/process/next_tick.js:63:19)
1|udp_recv | at Function.Module.runMain (internal/modules/cjs/loader.js:834:11)
1|udp_recv | at startup (internal/bootstrap/node.js:283:19)
1|udp_recv | at bootstrapNodeJSCore (internal/bootstrap/node.js:623:3)
但是一旦我停止所有应用程序(pm2 全部停止)并重新运行(pm2 全部启动)
然后没有错误,应用程序 运行s 正常没有任何错误。
我的 IP 是 192.168.0.9 在预定义端口上侦听 UDP 流。通过以太网连接的计算机从 IP 192.168.0.6
发送 UDP 流
谁能告诉我如何解决这个错误?
https://forums.balena.io/t/eaddrnotavail-when-trying-to-bind-socket-after-device-turns-back-on/4285
原来通过 dgram 重新启动后立即绑定会导致错误。
仅仅是因为 "EADDRNOTAVAIL" 表示地址不可用。
解决方案将 socket.bind 上的超时设置为 60 秒左右,它会正常工作。
setTimeout(() => {
server.bind({
address: "127.0.0.1",
port: process.env.SERVER_PORT,
exclusive : true
})
}, 60000)
此外,另一种解决方案是尝试 reconnect/rebind 服务器错误 "EADDRNOTAVAIL"
//If server(app.js) gets any error
server.on('error', (err) => {
console.log(`server error:\n${err.stack}`);
//Server is closed
//server.close();
//add an "if" block to check if the error is of type "EADDRNOTAVAIL"
server.bind({
address: "127.0.0.1",
port: process.env.SERVER_PORT,
exclusive : true
})
});
我正在尝试 运行 使用 pm2 的 NodeJS 应用程序(udp_recv)。 该应用程序通过 pm2 启动和 pm2 保存启动。 然而,dgram 给我一个错误说 -
server error:
1|udp_recv | Error: bind EADDRNOTAVAIL 192.168.0.9:7001
1|udp_recv | at state.handle.lookup (dgram.js:242:18)
1|udp_recv | at process._tickCallback (internal/process/next_tick.js:63:19)
1|udp_recv | at Function.Module.runMain (internal/modules/cjs/loader.js:834:11)
1|udp_recv | at startup (internal/bootstrap/node.js:283:19)
1|udp_recv | at bootstrapNodeJSCore (internal/bootstrap/node.js:623:3)
但是一旦我停止所有应用程序(pm2 全部停止)并重新运行(pm2 全部启动) 然后没有错误,应用程序 运行s 正常没有任何错误。
我的 IP 是 192.168.0.9 在预定义端口上侦听 UDP 流。通过以太网连接的计算机从 IP 192.168.0.6
发送 UDP 流谁能告诉我如何解决这个错误?
https://forums.balena.io/t/eaddrnotavail-when-trying-to-bind-socket-after-device-turns-back-on/4285
原来通过 dgram 重新启动后立即绑定会导致错误。 仅仅是因为 "EADDRNOTAVAIL" 表示地址不可用。
解决方案将 socket.bind 上的超时设置为 60 秒左右,它会正常工作。
setTimeout(() => {
server.bind({
address: "127.0.0.1",
port: process.env.SERVER_PORT,
exclusive : true
})
}, 60000)
此外,另一种解决方案是尝试 reconnect/rebind 服务器错误 "EADDRNOTAVAIL"
//If server(app.js) gets any error
server.on('error', (err) => {
console.log(`server error:\n${err.stack}`);
//Server is closed
//server.close();
//add an "if" block to check if the error is of type "EADDRNOTAVAIL"
server.bind({
address: "127.0.0.1",
port: process.env.SERVER_PORT,
exclusive : true
})
});