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

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。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/502618.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql 主键倒序查询速度慢_一亿条数据order by主键降序速度很慢

我用sysbench造了1亿条数据&#xff0c;mysql用了30分钟&#xff0c;tidb总共花了3个小时&#xff0c;感觉tidb在批量插入时比较慢&#xff0c;如果后面程序做分页查询会很慢的.count总数、降序排序也比mysql慢。tidb 执行时间&#xff0c;count 一亿条数据用了1分22秒多&#…

python切片逆序_Python 的逆序同时切片如何操作?

Python 的切片&#xff0c;语法是这样的a[[start]:[end][:[step]]]其中索引为 end 的元素不会被包括进来。start、end、step 和 step 前面的冒号都可以省略。这么多可以省略的&#xff0c;那么解释器是怎么设置默认值的呢&#xff1f;解释器对正序和逆序切片的默认值设置是不一…

camunda流程定义表无数据_创建流程实例时 act_ru_identitylink 表中没有出现相关的人员数据...

老师您好&#xff0c;我对流程实例有两个问题&#xff1a;创建流程实例的方法&#xff0c;视频中给出的是ProcessInstance processInstance runtimeService.startProcessInstanceByKey("Process_1", "business_id");请问这个方法和如下所示的方法有什么区…

静态网页托管_求职季,教你制作一份精美的在线网页简历,程序员必看!!

引言近期和学弟交流了一下找实习的相关的话题&#xff0c;谈到了简历这块。虽然近期没有找工作的打算&#xff0c;但还是会不定期的更新自己的简历。于是将自己的简历分享了一下&#xff0c;没想到得到了这样的评价&#xff0c;心里还是挺高兴的。简历的形式是一个在线的静态网…

mysql代码不熟_mysql存储过程的错误,语法不熟,找了好久没找到错误。。。

CREATEPROCEDUREupdate_pointer()begin/*done为1执行异常&#xff0c;停止执行*/DECLAREDoneINTDEFAULT0;DECLAREnowtimeINT;DECLAREyuefloat;DECLAREuidint;DECLAREyqmoneyfloat;DECLAREsummone...CREATE PROCEDURE update_pointer()begin/*done为1执行异常&#xff0c;停止执…

python axes_浅谈matplotlib.pyplot与axes的关系

最近在学习数据可视化&#xff0c;梳理一下其中一些诸如pandas绘图、matplotlib绘图、pyplot(plt)、axes等概念。重要的事情说三遍&#xff1a;axes不是axis&#xff01;axes不是axis&#xff01;axes不是axis&#xff01;重要的事情说三遍&#xff1a;pyplot是接口不是对象&am…

protobuf2和3同时安装_安装protobuf可能遇到的问题

http://code.google.com/p/protobuf/downloads/list安装&#xff1a;unzip protobuf-2.3.0.zipcd protobuf-2.3.0./configuremakemake checkmake install1.每步在执行过程中注意权限问题&#xff0c;有的命令不sudo执行会出问题。./configuremakemake checkmake install2. 执行…

python制作考试系统_Python系统学习 - Pytest单元测试框架

哈咯&#xff0c;大家&#xff0c;我们今天来学习pytest单元测试框架&#xff0c;这个框架要比unittest更加易于使用&#xff0c;结构性也更加好&#xff0c;希望大家能够从中学习到有用的东西&#xff0c;然后在下一章&#xff0c;我们来使用pytest单元测试框架来搭建一个web自…

python分析推特_用Python关注者的关注者抓取Twitter数据的最快方法

我在用Python在Twitter上做一个关于用户社交关系的研究。在问题是“什么是最快的方式抓取某个用户的关注者信息”我搜索了很多信息&#xff0c;目前正在使用Tweepy&#xff1a;c tweepy.Cursor(api.followers_ids, idcentre, count5000).items()while True:try:followers_ids_…

python修复不了_如何修复Python代码?

当您将变量定义为str()时&#xff0c;就是将它们分配给一个空字符串(尝试在命令shell或IDLE中运行str()&#xff0c;然后查看其返回值)。在然后&#xff0c;使用input()函数&#xff0c;您将为某些字符串重新定义变量&#xff0c;并且在if语句中&#xff0c;您将使用这些比较运…

为什么不可以使用哈曼顿距离_K-means真的不能使用曼哈顿距离吗?

问题说到k-means聚类算法&#xff0c;想必大家已经对它很熟悉了&#xff0c;它是基于距离计算的经典无监督算法&#xff0c;但是有一次在我接受面试时&#xff0c;面试官问了我一个问题&#xff1a;“k-means为什么不能使用曼哈顿距离计算&#xff0c;而使用欧式距离进行计算&a…

linux 查看进程_Linux怎么查看和监控每个进程的实时流量

请关注本头条号&#xff0c;每天坚持更新原创干货技术文章。如需学习视频&#xff0c;请在微信搜索公众号**“智传网优”**直接开始自助**视频学习**1. 前言NetHogs是一个开源的命令行工具(类似于Linux的top命令)&#xff0c;用来按进程或程序实时统计网络带宽使用率。来自NetH…

mysql修改密码1820_mysql5.7初始化密码报错ERROR1820(HY000):YoumustresetyourpasswordusingALTERUSERstateme...

1&#xff0c;mysql5.6是密码为空直接进入数据库的&#xff0c;但是mysql5.7就需要初始密码cat /var/log/mysqld.log | grep password或者&#xff1a;grep temporary password /var/log/mysqld.lo2&#xff0c;然后执行 mysql -uroot -p&#xff0c;输入上面的到的密码进入&am…

idea集成python_IDEA集成Python插件,SDK配置

(第一次写在博客园添加随笔&#xff0c; 会有些生硬&#xff0c;有不对的地方和描述错误之处希望可以指出)最近在学习一个新的知识点&#xff0c;涉及到Python的使用&#xff0c;因为第一次接触很多地方都不是很明白 &#xff0c;好&#xff0c;废话不多说&#xff0c;现在直接…

python 弹窗不阻断线程_Javascript 如何阻断程序的运行

通常情况下 JavaScript 是单线程的&#xff0c;一段 Js 程序的运行会占满整个程序进程&#xff0c;我们通常会想方设法的通过异步编程来减少程序的阻塞&#xff0c;那么我们今天反其道而行之&#xff0c;看看通过怎么样正常的方式来阻塞 Js 运行。无限循环单线程的 JavaScript …

linux复制文件夹到另一个目录_Linux|一个命令行统计给定目录中有多少个子目录,学浪计划...

wc命令用于统计指定文件的字节数、字数、行数、并将统计结果显示出来。一般格式&#xff1a; wc [选项] [文件]选项&#xff1a;-c&#xff0c;--bytes 统计字节数-l&#xff0c;--lines 统计行数-w&#xff0c;--words 统计字数ls命令-l 以长格式显示文本的详细信息。-R 表示递…

mysql源码安装分析_MySQL源码分析(0):编译安装及调试(转)

编译安装为了实现MySQL的更高级别的性能调优&#xff0c;我们通常需要理解其内部实现机制&#xff0c;并对其进行优化调试。在下面的系列中&#xff0c;我们会分别介绍MySQL的部分内部实现机制。首先我们介绍如何从源代码部署一台MySQL服务器。1.下载MySQL Community Server源码…

前端做后台管理系统有前途吗_关于后台管理系统前端项目的思考

开发后台管理系统是大部分前端开发人员接触过的项目&#xff0c;如何更好的进行项目的搭建、组件的开发、数据结构的设计等等&#xff0c;这些都是需要考虑的问题。以下是我结合一些项目的经历和其他大佬的项目代码与技术分享&#xff0c;做出了对于后台管理系统中前端项目的思…

用python绘制熊猫图案_绘制带有熊猫和Matplotlib的一分钟烛台

给出了以下Pandas数据帧的示例date open high low close volume0 2015-03-13 08:00:00 71.602 71.637 71.427 71.539 0.0002491 2015-03-13 08:01:00 71.541 71.563 71.461 71.501 0.0002152 2015-03-13 08:02:00 71.521 71.537 71.504 71.533 0.0000483 2015-03-13 08:03:00 7…

mysql修改主从复制id_mysql主从复制设置

三、mysql复制master和每个slave是通过unique ID来区分的(server-id选项),而且每个slave需要配置好master的主机名&#xff0c;日志文件名&#xff0c;和日志位置这些可以通过在slave会话中使用命令CHANGE MASTER TO &#xff0c;存储在slave的master.info文件中--begin1.在mas…