Node.js v12.0.0 Documentation​nodejs.org

Net模块提供一个异步的网络API,这个API可以创建基于流的TCP,或者IPC服务器(net.createServer()),和客户端(net.createConnection())。

它可以这样访问:

const net = require('net');

IPC支持

net模块在Windows上支持命名管道IPC,在其它系统上支持UNIX域套接字。

为IPC链接识别路径

net.connect()、net.createConnection()、server.listen()和socket.connect()使用一个path参数去识别IPC端点。

在UNIX中,本地域名也称之为UNIX域。路径是一个文件系统路径。它被从sizeof(sockaddr_un.sun_path)-1出截断,根据不同的系统在91到107字节之间。在Linux上通常为107个字节,在macOS上为103个字节。路径同样要遵循命名规范,并且在创建文件时会检查权限。如果UNIX域socket(这里作为一个文件系统路径可见)被创建,并且使用Node.js的API抽象(比如net.createServer())做连接,它将作为server.close()的一部分断开连接。另一方面,如果是在这些抽象之外创建和使用,用户需要手动移除。着同样适用于在Node.js API创建路径的时候,程序突然崩溃的情况。总之,一旦UNIX域socket被创建之后将会一直在文件系统中存在,直到断开连接。

在Windows上,本地域名通过使用命名的管道实现。路径必须是以?pipe 或者 .pipe为入口。任意字符都是被允许的,但是后者要处理一些管道的名字,比如解析..序列。不管看起来怎么样,管道命名空间都是平面的。管道不会持久保存。当它们的最后一个引用被关闭的时候被移除。不像UNIX领域socket,Windows将关闭和移除管道,当拥有管道的进程退出时。

JavaScript字符串转义要求路径用双反斜线转义,例如:

net.createServer().listen(path.join('?pipe', process.cwd(), 'myctl'));

Class:net.Server

在v0.1.90添加

该类用于创建一个TCP或者IPC服务器。

new net.Server([options][,connectionlistener])

  • options <Object> 参考 net.createServer([options][, connectionListener])。
  • connectionListener <Function> 为’connection’事件自动设置一个监听器。
  • 返回:<net.Server>
    net.Server是一个拥有以下事件的EventEmitter:

Event:’close’

V0.5.0添加

server关闭的时候发射。注意如果链接存在,事件在所有链接没有结束的时候不会发射。

Event:’connection’

v0.1.90添加

  • <net.Socket>

新建一个connection的时候发射。socket是net.Socket的实例。

Event:’error’

v0.1.90添加

  • <Error>

一个错误发生时发射。不同于net.Socket,’close’事件不会再这个事件之后直接发射,而是手动调用server.close()之后发射。参考server.listen()中的讨论。

Event:’listening’

v0.1.90添加

server在调用server.listen()绑定后发射。

server.address()

v0.1.90

  • 返回:<Object>|<string>

如果在一个IP socket上监听(当得到一个OS-指定的地址,用于查找分配了哪个端口),返回绑定的address、地址family名字、和操作系统报告的服务器的port:{ port: 12346, family: 'IPv4', address: '127.0.0.1' }。

对于监听一个管道或者UNIX域socket的server,返回的名字是一个字符串。

const server = net.createServer((socket) => {socket.end('goodbyen');
}).on('error', (err) => {// handle errors herethrow err;
});// Grab an arbitrary unused port.
server.listen(() => {console.log('opened server on', server.address());
});

在’listening’事件未发射之前,不要调用server.address()。

server.close([callback])

v0.1.90添加

  • callback <Function> 当server关闭的时候调用。
  • 返回:<net.Server>

停止server接收新的链接和保持存在的链接。这个函数是异步的,server会在所有链接结束的时候关闭,并且发射一个’close’事件。callback会在’close’事件发生时调用。不同于其它事件,Error将会作为它的唯一参数被调用,如果server在关闭的并没有打开。

server.getConnections(callback)

v0.9.7添加

  • callback <Function>
  • 返回:<net.Server>

异步获得服务器上的并发链接数。当socket被传递到子进程时工作。

回调函数应该有两个参数err和count。

server.listen()

启动一个服务器监听链接。一个net.Server根据监听的内容可以是一个TCP,或者IPC服务器。

可能的参数:

  • server.listen(handle[,backlog][,callback])
  • server.listen(options[, callback])
  • server.listen(path[,backlog][,callback]) 对于IPC服务器
  • server.listen(port[[, host[, backlog]]][, callback])对于TCP服务器

这个函数是异步的。当服务器开始监听的时候,’listening’事件会被发射。最后一个callback参数会被添加,当为’listening’事件添加一个监听器时。

所有的listen()方法都可以通过一个backlog参数指定排队的等待链接数的最大值。实际的长度将会取决于OS的sysctl设置,例如Linux上是tcp_max_syn_backlog和somaxconn。这个参数的默认值是511。

所有的net.Socket都被设置为SO_REUSEADDR(参考socket(7)了解详细)。

当且仅当第一次调用server.listen()或者server.close()抛出一个错误的时候可以再次调用server.listen()。否则,会抛出一个ERR_SERVER_ALREADY_LISTEN错误。

最常见的一个错误是监听到EADDRINUSE。这是因为另一个服务正在监听请求的port/path/handle。一种处理这个情况的方法是过一段时间后重试:

server.on('error', (e) => {if (e.code === 'EADDRINUSE') {console.log('Address in use, retrying...');setTimeout(() => {server.close();server.listen(PORT, HOST);}, 1000);}
});

server.listen(handle[,backlog][,callback])

v0.5.10添加

  • handle <Object>
  • backlog <number> server.listen()函数的通用参数
  • callback <Function> server.listen()函数的通用参数
  • 返回:<net.Server>

启动一个服务器,在给定的handle上监听链接,这个handle已经被绑定到一个端口、一个UNIX域socket、或者一个Windows的管道。

handle对象可以是一个服务器、一个socket(任何拥有底层_handle成员的东西),或者拥有fd成员(一个有效的文件描述符)的对象。

Windows上不支持监听一个文件描述符。

server.listen(options[,callback])

v11.4.0 支持ipv6Only选项

在v0.11.14版本添加

  • options<Object>必须的。支持以下属性:

    • Port <number>
    • Host <string>
    • Path <string> 如果指定了端口将会忽略。参考《为IPC链接识别路径》
    • backlog <number> server.listen()函数的通用参数。
    • Exclusive <boolean> 默认:false
    • readableAll<boolean> 对于IPC服务器,它让管道被所有用户可读。默认:false
    • writableAll<boolean>对于IPC服务器,它让管道被所有用户可写。默认:false
    • ipv6Only <boolean> 对于TCP服务器,设置ipv6Only设置为true,将会使双协议栈不可用。也就是,绑定::到主机,不会使0.0.0.0被绑定。默认:false。
  • Callback <Function> server.listen()的通用函数。
  • 返回: <net.Server>

如果指定了port,它的作用和server.listen([port[, host[, backlog]]][, callback])一样。否则,如果path被指定,它的作用跟server.listen(path[, backlog][, callback])。如果都没有指定,则会抛出错误。

如果exclusive是false(默认),则cluster workers都会使用相同的底层句柄,允许链接处理责任分享(?)。当exclusive是true,句柄不会被分享,企图分享端口会报错。下面的例子是监听一个独享端口的代码。

server.listen({host: 'localhost',port: 80,exclusive: true
});

使用一个IPC服务器作为root,可能导致没有特权的用户无法访问服务器路径。使用readableAll和writableAll可以使服务器对所有用户可访问。

server.listen(path[,backlog][,callback])

在v0.1.90添加

  • Path <string> 服务器应该监听的路径。参考《为IPC链接识别路径》
  • backlog <number> server.listen()函数的通用参数。
  • Callback <Function> server.listen()的通用函数。
  • 返回:<net.Server>

启动一个IPC服务器监听给定的path的链接。

server.listen([port[,host[,backlog]]][,callback])

在v0.1.90添加

  • Port <number>
  • Host <string>
  • Backlog <number> server.listen()函数的通用参数。
  • callback<Function> server.listen()函数的通用参数。
  • 返回:<net.Server>

启动一个TCP服务器监听给定的port和host的链接。

如果port被忽略,或者是0,则操作系统会任意分配一个未使用的端口,在发射’listening’事件发射之后,可以使用server.address().port重新设置。

如果host被忽略,如果IPv6可见,则接收在unspecified IPv6 address(::)上的链接,或者unspecified IPv4 address0:0:0:0)。

在大多数操作系统上,监听unspecified IPv6 address (::)可能会导致net.Server同样监听unspecified IPv4 address (0.0.0.0)。

server.listening

在v5.7.0添加

  • <boolean> 表明服务器是否在监听链接。

server.maxConnections

在v0.2.0添加

设置这个属性,当服务器的链接数过高的时候丢弃链接。

一旦一个socket使用child_process.fork()被传递到一个子进程,则不推荐使用这个选项。

server.ref()

在v0.9.1添加

  • 返回:<net.Server>

跟unref()相反,在之前unref过的服务器上调用ref(),如果这是唯一存留的服务器,将不会使程序退出(默认行为)。如果已经ref的服务器再次调用ref(),则不会有作用。

server.unref()

在v0.9.1添加

  • 返回:<net.Server>

如果这个server是事件系统中唯一有效的,则调用unref()会允许程序退出。如果已经unref的服务器再次调用unref(),则不会有作用。

Class:net.Socket

在0.3.4添加

这个类是TCP socket,或者是流IPC端点(在Windows中名字是管道,UNIX用的是领域socket)的抽象类。net.Socket是一个双工流,所以它可读可写,它同样是一个EventEmitter。

用户可以创建一个net.Socket,并且可以直接跟一个服务器交互。例如:它由net.createConnection(),所以用户可以跟服务器通讯。

Node.js同样可以创建一个,并且在接收到链接时传递给用户。例如,它被传递给在一个net.Server发射的‘connection’事件的监听器上,所以用户可以用它跟客户端交流。

new net.Socket([options])

v0.3.4添加

  • options <Object> 可见的选项如下:

    • fd <number> 如果指定了该参数,则使用给定的文件描述符包装已存在的socket,否则会创建一个新的socket。
    • allowHalfOpen <boolean> 表明是否允许half-opened TCP 链接。参考net.createServer()和'end'事件了解详细。默认:false。
    • readable <boolean> 当传了fd之后允许在socket上读,否则忽略。默认:false。
    • writable <boolean> 当传了fd之后允许在socket上写,否则忽略。默认:false。
  • 返回:<net.Socket>

创建一个新的socket对象。

新创建的socket可以是一个TCP socket,也可以是一个流IPC端点,这取决于它connect()[socket.connect()]什么。

Event: 'close'

在v0.1.90添加

  • hadError <boolean> true 如果socket有一个传送错误。

在socket完全关闭以后发射。hadError参数是一个布尔值,它表示socket是否是因为传输错误导致的关闭。

Event: 'connect'

在v0.1.90添加

当一个socket链接完全建立之后发射。参考net.createConnection()。

Event: 'data'

在v0.1.90添加

  • <Buffer> | <string>

当数据收到的时候发射。参数data将会是一个Buffer,或者String。socket.setEncoding()设置数据编码。

注意,如果当一个Socket发射一个'data'事件的时候没有监听者,数据会丢失。

Event:'drain'

在v0.1.90添加

当写缓存变空的时候发射。可以用来上传节流。

参考:socket.write()的返回值。

Event:'end'

在v0.1.90添加

当socket的另一端发送一个FIN包的时候发射,因此结束socket的可读的一端。

默认(allowHalfOpen是false),socket将会发送一个FIN包返回,并且一旦写入它的等待队列,就销毁它的文件描述符。然而,如果allowHalfOpen被设置为true,socket不会自动end()它的可写端,允许用户写任意数量的数据。用户必须显示的调用end()去结束链接(也就是发送一个FIN包返回)。

Event: 'error'

在v0.1.90添加

  • <Error>

当一个错误发生时发射。在这个事件之后'close'事件会被调用。

Event: 'lookup'

v5.10.0 支持host参数。

v0.11.3 添加

在连接之前解析主机之后发射。不适用于UNIX socket。

  • err <Error> | <null> error对象。参看dns.lookup()。
  • address <string> IP地址
  • family <string> | <null> 地址类型。参看dns.lookup()。
  • host <string> 主机名称。

Event: 'ready'

在v9.11.0添加

当一个socket准备好被使用时发射。

在'connect'之后触发。

Event:'timeout'

在v0.1.90添加

不活动的socket超时时发射。这只能提示socket是空闲状态。用户必须手动关闭链接。

参考:socket.setTimeout()。

socket.address()

在v0.1.90添加

  • 返回:<Object>

返回绑定的address、地址的family名字和操作系统报告的socket的port:{ port: 12346, family: 'IPv4', address: '127.0.0.1' }

socket.bufferSize

在v0.3.8添加

net.Socket拥有socket.write()一直工作的属性。这帮助用户快速启动和运行。计算机不能总是赶得上写入一个socket的数据量——网络链接只是可能太慢了。Node.js需要内部排队数据写入一个socket,并且在可能的时候发送出去。(内部轮询socket的文件描述符是可写的)。

内部缓存的后果是导致内存上升。这个属性显示要写入的字符的数量。(字符的数量大约跟要写入的字节的数量一致,但是缓存中可能包含字符串(字符串是lazily编码的),所以具体的字节数不确定)

有经验的用户在处理大的,或者增长的bufferSize应该在他的程序中使用socket.pause()和socket.resume()节流数据。

socket.bytesRead

在v0.5.3添加

接收到的字节的数量

socket.bytesWritten

在v0.5.3添加

发送的字节数

socket.connect()

在给定的socket上创建一个链接。

可能的样本:

  • socket.connect(options[,connectListener])
  • socket.connect(path[,connectListener]) 对于IPC链接。
  • socket.connect(port[,host][,connectListener])对于TCP链接。
  • 返回:<net.Socket>socket本身。

这个函数是异步的。当链接建立时,'connect'事件将会被发射。如果这是一个有问题的连接,则不会发射'connect'事件,而是会发射'error'事件并且把错误传递给'error'监听者。最后的参数connectListener(如果一旦指定了),将会被当做'connect'事件的监听者。

socket.connection(options[,connectListener])

v6.0.0 在所有情况下hints选项都默认为0。之前,在缺少family选项时,它默认为dns.ADDRCONFIG | dns.V4MAPPED。

v5.11.0 支持hints选项。

v0.1.90 添加

  • options <Object>
  • connectListener <Function> socket.connect()方法的通用参数。将会被添加为'connect'事件的监听者。
  • 返回:<net.Socket> socket本身。

在给定的socket上创建一个链接。通常这个方法是不需要的,socket应该通过net.createConnection()创建和打开。只有在自定义一个Socket的时候需要这个方法。

对于TCP链接,可见的options有:

  • port <number> 需要。socket应该连接的端口。
  • host <string> socket需要连接的主机。默认:'localhost'。
  • localAddress <string> socket应该连接的本地地址。
  • localPort <number> socket应该连接的本地端口。
  • family <number> IP协议的版本,可以是4或者6。默认:4。
  • hints <number> 可选择的 dns.lookup() 提示。
  • lookup <Function> 自定义查找方法。默认:dns.lookup()。

对于IPC链接,可见的options是:

  • path <string> 需要。客户端需要连接的路径。参考<为IPC链接识别路径>。

socket.connect(path[,connectListener])

  • path <string> 客户端应该连接的路径。参考<为IPC链接识别路径>。
  • connectListener <Function> socket.connect()方法的通用参数。将会被添加为'connect'事件的监听者。
  • 返回:<net.Socket> socket本身。

相当于用{ path: path}当做options调用socket.connect(options[,connectListener])。

socket.connect(port[,host][,connectlistener])

在v0.1.90添加

  • port <number> 客户端应该连接的端口。
  • host <string> 客户端t需要连接的主机。
  • connectListener <Function> socket.connect()方法的通用参数。将会被添加为'connect'事件的监听者。
  • 返回:<net.Socket> socket本身。

在给定的socket上创建一个链接。

相当于用{port: port, host: host}当做options调用socket.connect(options[,connectListener])。

socket.connecting

在v6.1.0添加

如果是true,表示调用了socket.connect(options[, connectListener])并且函数还在执行。直到socket连接上还是true,然后设置为false,并且发射'connect'事件。注意,socket.connect(options[,connectListener])回调是'connect'事件的监听者。

socket.destroy([exception])

在v0.1.90添加

  • exception <Object>
  • 返回: <net.Socket>

确保没有多余的I/O活动在这个socket中。只有必要的错误(解析错误或者其它)。

如果指定了exception,则当一个'error'事件发射的时候,任何该事件的监听者都会收到exception参数。

socket.destroyed

  • <boolean> 表示链接是否被销毁了。一旦链接被销毁了,则不会有数据用它来传送。

socket.end([data][,encoding][,callback])

在v0.1.90添加

  • data <string> | <Buffer> | <Uint8Array>
  • encoding <string> Only used when data is string. 默认:'utf8'。
  • callback <Function> 当socket完成是的可选回调函数。
  • 返回:<net.Socket> socket本身。

半关闭socket。也就是,发送一个FIN包。如果可能,服务器仍然会发送一些数据。

如果指定了data,相当于调用socket.write(data, encoding)之后接着调用socket.end()。

socket.localAddress

在v0.9.6添加

字符串代表了远程客户端连接的本地IP地址。例如,一个服务器监听'0.0.0.0',如果一个客户端连接'192.168.1.1',则socket.localAddress将会是'192.168.1.1'。

socket.localPort

在v0.9.6添加

这个数字代表本地端口。例如,80或者21。

socket.pause()

  • 返回: <net.Socket> socket本身。

暂停读取数据。就是'data'事件将不会发射。用户减慢上传的速度。

socket.pending

在v11.2.0添加

  • <boolean>

如果是true则表示socket还没有连接,或者因为.connect()还没有被调用到,或者还在连接的过程中(参考socket.connecting)。

socket.ref()

在v0.9.1

  • 返回:<net.Socket> socket本身。

unref的反面,在之前调用过unref的socket上面调用ref(),如果这是仅存的socket,则不会让程序退出(默认行为)。如果socket已经调用过ref,则再次调用没有效果。

socket.remoteAddress

在v0.5.10添加

字符串代表远程IP地址。例如,'74.125.127.100' 或者 '2001:4860:a005::68'。如果socket被销毁(例如,如果客户端断开连接)则数值是undefined。

socket.remoteFamily

在v0.5.10添加

字符串代表远程IP协议族。'IPv4',或者'IPv6'。

socket.remotePort

在v0.5.10添加

这个数字代表远程端口。例如,80或者21。

socket.resume()

  • 返回:<net.Socket> socket本身。

在调用socket.pause()之后恢复读。

socket.setEncoding([encoding])

在v0.1.90添加

  • encoding <string>
  • 返回:<net.Socket> socket本身。

为Readable Stream设置编码。参考readable.setEncoding()或者更多信息。

socket.setKeepAlive([enable][,initialdelay])

在v0.1.92添加

  • enable<boolean> 默认:false
  • initialDelay <number> 默认:0
  • 返回:<net.Socket> socket本身。

启动/禁止长连接功能,在第一个长连接探针被发送到一个空闲socket之前设置任意初始延迟。

设置initialDelay(毫秒)设置延迟,在收到最后一个数据包和第一个长连接探针之间。initialDelay设置0,将会保持默认值不变。

socket.setNoDelay([noDelay])

在v0.1.90添加

  • noDelay <boolean> 默认:true
  • 返回:<net.Socket> socket本身。

禁止Nagle算法。默认TCP链接会使用Nagle算法,在发送数据之前会缓存数据。把noDelay设置为true,将会在每次调用socket.write()之后立即发送数据。

socket.setTimeout(timeout[,callback])

在v0.1.90添加

  • timeout <number>
  • callback <Function>
  • 返回: <net.Socket> socket本身。

设置socket超时在timeout毫秒不活动之后。默认:net.Socket没有超时。

当一个闲置的超时被触发,socket会收到一个'timeout'事件,但是连接不会被断开。用户需要手动调用socket.end(),或者socket.destroy()去结束连接。

socket.setTimeout(3000);
socket.on('timeout', () => {console.log('socket timeout');socket.end();
});

如果timeout是0,则现有的闲置超时被禁止。

可选择的callback参数对于'timeout'事件,将会被当做一个以前的监听者。[The optional callback parameter will be added as a one-time listener for the 'timeout' event.]

socket.unref()

在v0.9.1添加

  • 返回:<net.Socket> socket本身。

在一个socket上调用unref(),则如果这是在事件系统中唯一的活动socket,则允许程序退出。如果socket已经调用过unref,则再次调用没有效果。

socket.write(data[,encoding][,callback])

在v0.1.90添加

  • data <string> | <Buffer> | <Uint8Array>
  • encoding <string> 只有在数据是string的时候使用。默认:utf8。
  • callback <Function>
  • 返回:<boolean>

在socket上发送数据。第二个参数在是字符串的时候指定编码——默认UTF8。

如果所有的数据都刷新到内部缓存则返回true。如果数据在用户内存中排队则返回false。但缓存再次空闲时发射'drain'事件。

可选用的参数callback将会被执行,在数据最终被写出之后——这个可能不会立即执行。

参考Writable流的write()方法获得更多信息。

net.connect()

net.createConnection()的别名。

可能的样本:

  • net.connect(options[,connectListener])
  • net.connect(path[,connectListener]) 对于IPC链接。
  • net.connect(port[,host][,connectListener])对于TCP链接。

net.connect(options[,connectListener])

在v0.7.0添加

  • options <Object>
  • connectListener <Function>

net.createConnection(options[,connectListener])的别名。

net.connect(path[,connectListener])

在v0.1.90添加

  • path <string>
  • connectListener <Function>

net.createConnection(path[,connectListener])的别名

net.connect(port[,host][,connectlistener])

在v0.1.90添加

  • port<number>
  • host<string>
  • connectListener <Function>

net.createConnection(port[,host][,connectListener])的别名。

net.createConnection()

一个工厂函数,它创建一个新的net.Socket,立即通过socket.connect()启动连接,然后返回启动连接的net.Socket。

当链接建立,在返回的socket上会发送一个'connect'事件。如果提供了最后一个connectListener参数,它将会被当做'connect'事件的监听者。

可能的样本:

  • net.createConnection(options[,connectListener])
  • net.createConnection(path[, connectListener])对于IPC链接。
  • net.createConnection(port[,host][,connectListener])对于TCP链接。

net.connect()函数是这个函数的别名。

net.createConnection(options[,connectListener])

在v0.1.90添加

  • options <Object> 需要。将会同时传递给new netSocket([options])调用和socket.connect(options[,connectListener])方法。
  • connectListener <Function> net.createConnection()函数的通用参数。如果提拱了,将会被当做返回的socket的'connnect'事件的监听者。
  • 返回: <net.Socket> 新创建的socket需要启动链接。

可见的选项为:参考new net.Socket([options])和socket.connect(options[,connectListener])。

附加选项:

  • timeout <number> 如果设置了,会在socket创建之后,但是它启动连接之前,将会用来调用socket.setTimeout(timeout)。

下面是在net.createServer()章节描述的客户端服务器的例子:

const net = require('net');
const client = net.createConnection({ port: 8124 }, () => {// 'connect' listenerconsole.log('connected to server!');client.write('world!rn');
});
client.on('data', (data) => {console.log(data.toString());client.end();
});
client.on('end', () => {console.log('disconnected from server');
});

想要连接到socket /tmp/echo.sock,只需要将第二行改为:

const client = net.createConnection({ path: '/tmp/echo.sock' });

net.createConnect(path[,connectListener])

在v0.1.90添加

  • path <string> socket需要连接的路径。将会传递给socket.connect(path[,connectListener])。参考<为IPC链接识别路径>
  • connectListener <Function> net.createConnection()的通用参数,在初始化socket的时候的"一次"监听器。将会传递给socket.connect(path[,connectListener])。
  • 返回:<net.Socket> 新创建的socket需要启动连接。

初始化一个IPC连接。

这个函数用所有默认选项创建一个新net.Socket,立即通过socket.connect(path[,connectListener])启动连接,然后返回net.Socket启动连接。

net.createConnect(port[,host][,connectlistener])

在v0.1.90添加

  • port<number> socket需要连接的端口。将会传递给socket.connect(port[,host][,connectListener])。
  • host<string> socket需要连接的主机。将会传递给socket.connect(port[,host][,connectListener])。默认:'localhost'。
  • connectListener <Function> net.createConnection()的通用参数,在初始化socket的时候的"一次"监听器。将会传递给socket.connect(path[,connectListener])。
  • 返回:<net.Socket> 新创建的socket需要启动连接。

初始化一个TCP连接。

这个函数用所有默认选项创建一个新net.Socket,立即通过socket.connect(port[,host][,connectListener])启动连接,然后返回net.Socket启动连接。

net.createServer([options][,connectionlistener])

在v0.5.0添加

  • options <Object>

    • allowHalfOpen <boolean> 表明是否允许半开的TCP链接。默认:false。
    • pauseOnConnect <boolean> 表明是否应该在传入链接上暂停socket。默认:false。
    • connectionListener <Function> 自动为'connection'事件设置一个监听者。
  • 返回:<net.Server>

创建一个新的TCP,或者IPC服务器。

如果allowHalfOpen设置为true,当socket的另一端发送一个FIN包时,当明确调用socket.end()时服务器将只会发送一个FIN包返回,直到那时链接是半关闭(不可读但是可写)。参考'end'事件和FRC 1122(4.2.2.13章)获得更多信息。

如果pauseOnConnect设置为true,则每个传入的链接关联的socket都将暂停,并且从他的句柄里面读不到任何数据。这允许链接在进程间传递,并且原始进程不读取任何数据。开始从暂停的socket中读取数据,调用socket.resume()。

服务器可以是一个TCP服务器,或者一个IPC服务器,取决于listen()什么。

下面是一个TCP回声服务器的例子,它监听的是8124端口:

const net = require('net');
const server = net.createServer((c) => {// 'connection' listenerconsole.log('client connected');c.on('end', () => {console.log('client disconnected');});c.write('hellorn');c.pipe(c);
});
server.on('error', (err) => {throw err;
});
server.listen(8124, () => {console.log('server bound');
});

使用telnet测试它:

$ telnet localhost 8124

要监听在socket的/tmp/echo.sock上,最后三行应该改为:

server.listen('/tmp/echo.sock', () => {console.log('server bound');
});

使用nc去连接到一个UNIX域socket服务器上:

$ nc -U /tmp/echo.sock

net.isIP(input)

在v0.3.0添加

  • input <string>
  • 返回: <integer>

检查输入是否是一个IP地址。返回0表示无效字符串,返回4表示IP的版本是4,返回6表示IP的版本是6。

net.isIPv4(input)

在v0.3.0添加

  • input <string>
  • 返回: <boolean>

如果输入的地址是IPv4则返回true,否则返回false。

net.isIPv6(input)

在v0.3.0添加

  • input <string>
  • 返回: <boolean>

如果输入的地址是IPv6则返回true,否则返回false。

js监听iframe关闭_Node.js文档NET[翻译]相关推荐

  1. js监听iframe是否加载完毕

    js监听iframe是否加载完毕 代码片. //初始化加载var a = document.getElementById(iframe的id);var iframeLoad = function () ...

  2. js监听浏览器关闭事件(区分刷新和关闭,兼容IE9,10,11,Edge,Chrome和Firefox)

    由于各浏览器兼容性不同,所以首先要先区分各浏览器 var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串 var isOpera = use ...

  3. html监听页面关闭事件,JS针对浏览器窗口关闭事件的监听方法集锦

    本文实例总结了JS针对浏览器窗口关闭事件的监听方法.分享给大家供大家参考,具体如下: 方式一:(适用于IE浏览器,而且刷新不提示,只在点击浏览器关闭按钮的时候提示) window.οnbefοreun ...

  4. js监听用户关闭当前页面

    只需要监听一个函数 当然 前提是 你的dom树要挂载好了 如果你是vue项目 放在mounted里就好了 window.onbeforeunload = function(e) {debugger }

  5. 原生js监听滚动条_原生JS实现滚动条监听

    本文主要利用原生的javascript实现滚动条事件的监听,主要涉及的知识: (1)利用React组件渲染一个UI页面 (2)实现锚点链接 (3)实现滚动条onscroll事件 其中,利用React渲 ...

  6. js监听浏览器关闭页面事件

    window.onbeforeunload = function() {//功能函数 } window.onbeforeunload = function(e) {var e = window.eve ...

  7. java计算器监听放大缩小,js监听页面放大缩小

    demo body[zoom='scale']:before{ content: '您的网页处于缩放状态,请按 Ctrl+0 恢复到浏览器默认大小'; z-index: 9999; position: ...

  8. js 监听浏览器刷新还是关闭事件

    // $(window).bind('beforeunload',function(){return '您输入的内容尚未保存,确定离开此页面吗?';}); // window.onbeforeunlo ...

  9. linux输入数字切换浏览器tab,js监听浏览器tab窗口切换

    js监听浏览器tab窗口切换 --IT唐伯虎 摘要:js监听浏览器tab窗口切换. if (document.hidden !== undefined) { document.addEventList ...

最新文章

  1. oracle索引与mysql区别_MySQL和Oracle中的唯一性索引从差别(r12笔记第83天)
  2. pandas 索引与列相互转化
  3. ESP32启明云端又有新玩法|基于ESP32+热像仪传感的物联网非接触智能测温终端为高考护航了
  4. 如何使用github中的pull request功能?
  5. body curl命令测试post_HTTP接口调试利器!4.8万Star的HTTP命令行客户端!
  6. Cordova+Vue快速搭建Hybrid App
  7. Fluent软件零基础入门到精通教程
  8. 不能错过的linux驱动开发的经典书籍推荐
  9. WAP1.x协议栈浅析-WSP协议
  10. CSS实现表格表头(thead)固定,内容(tbody)滚动
  11. JavaScript 表单对象 | 看完不会请来捶我
  12. Abp mysql guid_使用ABP框架踩过的坑系列5
  13. Groovy~Groovy的List(列表)操作
  14. 合理使用百度开放平台(一)---动物识别
  15. 生酮咖啡是什么意思?生酮咖啡真的能减肥吗?
  16. 【编译原理】词法分析(正规式与自动机)
  17. PO, AP, GL Open/Closed Period Action
  18. 实战各大平台商品比价--Python 爬取过客网商品历史价格(30天)
  19. python执行CMD指令,并获取返回
  20. KT1025A蓝牙音频BLE芯片读取U盘和TF卡的TXT BIN文件串口输出

热门文章

  1. (转)Web Services使用多态(XmlInclude) ,支持自定义类型
  2. 用visio反向工程画oracle数据库表的结构图
  3. 买家和卖家也可以这样对话
  4. JVM学习笔记-01-JVM的学习方式
  5. centos 安装MySQL报错You could try using --skip-broken to work around the problem You could try running:
  6. php数组转换编码,PHP数组转换编码类
  7. git idea 图形化_Git大全,你所需要的Git资料都在这里
  8. html表格统计表,jQuery操作表格(table)的常用方法、技巧汇总
  9. ns3 统计一个包所经历的时延_【直击UDE2020】显示链接的智慧生活,你我正在经历...
  10. 服务器装系统用哪个好,服务器系统重装用哪个系统