我想在应用程序的持续时间内保留一个端口,但是应用程序不应该一直在监听端口。因此,我希望将bind()
来电与listen()
来电解除。
nodejs中的UDP / Datagram套接字具有bind
功能。但是我在“普通”(TCP)套接字API中找不到它的等价物。
是否可以在不收听的情况下进行绑定?
答案 0 :(得分:3)
您可以创建未打包的TCP套接字:
const net = require('net');
const TCP = process.binding('tcp_wrap').TCP;
const socket = new TCP();
// Bind is done here.
socket.bind('0.0.0.0', 3333);
console.log('bound');
// Then, at some later stage, if you want to listen,
// you can use the previously created (and bound) socket.
setTimeout(() => {
console.log('listening');
const server = net.createServer((conn) => {
console.log('got connection');
conn.end('bye\n');
}).listen(socket);
}, 5000);
编辑:要在Node v9.3.0及更高版本上实例化套接字,您需要将额外的参数传递给构造函数:
const TCPWrap = process.binding('tcp_wrap');
const { TCP } = TCPWrap;
const socket = new TCP(TCPWrap.constants.SERVER); // or .SOCKET
区别在于使用async_hooks
时能够区分两种类型的套接字。