HRJ*_*HRJ 3 sockets tcp node.js
我想在应用程序运行期间保留一个端口,但应用程序不应始终侦听该端口。因此我想将bind()呼叫与listen()呼叫解耦。
Nodejs中的UDP/Datagram套接字有一个bind功能。但我在“普通”(TCP)套接字 API 中找不到它的等效项。
是否可以不监听就绑定?
您可以创建未包装的 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);
Run Code Online (Sandbox Code Playgroud)
编辑:要在 Node v9.3.0 及更高版本上实例化套接字,您需要向构造函数传递一个额外的参数:
const TCPWrap = process.binding('tcp_wrap');
const { TCP } = TCPWrap;
const socket = new TCP(TCPWrap.constants.SERVER); // or .SOCKET
Run Code Online (Sandbox Code Playgroud)
区别在于使用时能够区分两种类型的socket async_hooks。
| 归档时间: |
|
| 查看次数: |
2318 次 |
| 最近记录: |