net.Socket类
- 'lookup' 事件
- 'connect' 事件
- 'data' 事件
- 'drain' 事件
- 'end' 事件
- 'close' 事件
- 'timeout' 事件
- 'error' 事件
- new net.Socket([options])
- socket.bufferSize
- socket.bytesRead
- socket.bytesWritten
- socket.localPort
- socket.localAddress
- socket.remotePort
- socket.remoteFamily
- socket.remoteAddress
- socket.setEncoding([encoding])
- socket.setTimeout(timeout[, callback])
- socket.setNoDelay([noDelay])
- socket.setKeepAlive([enable][, initialDelay])
- socket.connect(path[, connectListener])
- socket.connect(port[, host][, connectListener])
- socket.connect(options[, connectListener])
- socket.write(data[, encoding][, callback])
- socket.pause()
- socket.resume()
- socket.end([data][, encoding])
- socket.destroy()
- socket.address()
- socket.unref()
- socket.ref()
该对象是 TCP 或本地 socket 的抽象。net.Socket 实例实现了一个双工(duplex)流接口。它们可以由用户创建并当成一个客户端(通过 connect()),或由 Node.js 创建并通过服务器的 'connection' 事件传递给用户。
'lookup' 事件
在解析主机名之后,但在连接之前发出事件。不适用于 Unix socket 。
err{Error} | {Null} 错误对象。详见 dns.lookup()。address{String} IP 地址。family{String | Null} 地址类型。详见 dns.lookup()。host{String} 主机名。
'connect' 事件
当成功建立了 socket 连接时发出。详见 connect()。
'data' 事件
- {Buffer}
当接收到数据时发出。data 参数会是一个 Buffer 或 String。数据的编码通过 socket.setEncoding() 设置(请参阅只读流章节获取更多信息)。
请注意,当一个 Socket 发出 'data' 事件时,如果没有设置监听器,数据将会丢失。
'drain' 事件
在写入 buffer 变为空时发出。可用于限制上传。
也可以看看:socket.write() 的返回值。
'end' 事件
当 socket 的另一端发送了一个 FIN 包时发生。
默认情况下(allowHalfOpen == false),一旦 socket 写完了待写队列中的数据,它就会销毁它的文件描述符。然而,通过设置 allowHalfOpen == true, socket 不会在它这一端自动调用 end(),允许用户写入任意数量的数据,用户在他们这一端要求 end() 会得到警告。
'close' 事件
had_error{Boolean}true,如果该 socket 发生了一个传输错误。
一旦 socket 完全关闭时发出。had_error 参数是一个布尔值,表示 socket 是否是由于传输错误而关闭的。
'timeout' 事件
在 socket 闲置超时的时候发出。这只是通知 socket 已经闲置。用户必须手动关闭连接。
也可以看看:socket.setTimeout()。
'error' 事件
- {Error}
在发生错误时发出。'close' 事件会直接在该事件之后调用。
new net.Socket([options])
构造一个新的 Socket 对象。
options 是一个带有以下默认值的对象:
{
fd: null,
allowHalfOpen: false,
readable: false,
writable: false
}
fd 允许你指定现有的 socket 文件描述符。设置 readable 或 writable 为 true 将允许在该 socket 上读取或写入(注意:仅当传入 fd 时有效)。关于 allowHalfOpen,请参考 createServer() 和 'end' 事件。
net.Socket 实例是 EventEmitter。
socket.bufferSize
net.Socket 有该属性以保证 socket.write() 总是有效。这是为了帮助用户快速启动和运行。计算机不能总是赶上写入到一个 socket 中的数据量——网络连接只可能太慢。Node.js 在内部以队列形式写入到 socket 中,并在合适时机通过报文发送。(在内部,Node.js 轮询 socket 的文件描述符以保证可写)
内部缓存可能会导致内存占用增加。该属性表示要被写入到当前缓冲的字符数。(字符数大约等于被写入的字节数,但 buffer 可能包含字符串并且该字符串是惰性编码的,所以无法知晓字节的确切数目。)
遇到大的或增长的 bufferSize 的用户,应该在他们的程序中尝试通过 pause() 和 resume() 进行数据“节流”。
socket.bytesRead
已接收的字节数。
socket.bytesWritten
发送的字节数。
socket.localPort
该数字表示本地端口。例如,80 或 21。
socket.localAddress
该字符串表示用于远程客户端连接的本地 IP 地址。例如,如果你监听 '0.0.0.0' 并且客户端连接到了 '192.168.1.1',该值将会是 '192.168.1.1'。
socket.remotePort
该数字表示远程端口。例如,80 或 21。
socket.remoteFamily
该数字表示远程 IP 族。'IPv4' 或 'IPv6'。
socket.remoteAddress
该数字表示远程 IP 地址。例如,'74.125.127.100' 或 '2001:4860:a005::68'。如果 socket 被销毁,那么值也可能是 undefined(例如,假设客户端断开连接)。
socket.setEncoding([encoding])
设置 socket 的编码作为一个只读流。详见 stream.setEncoding() 了解更多信息。
socket.setTimeout(timeout[, callback])
设置 socket 在闲置了 timeout 毫秒后超时。默认情况下,net.Socket 不会超时。当空闲超时被触发后,socket 会收到一个 'timeout' 事件,但连接不会被切断。用户必须手动 end() 或 destroy() socket。
如果 timeout 是 0,那么现有的空闲超时会被禁用。
可选的 callback 参数将被添加为 'timeout' 事件的一次性监听器。
返回 socket。
socket.setNoDelay([noDelay])
禁用 Nagle 算法。默认情况下 TCP 连接使用 Nagle 算法,它们在发送关闭之前缓存数据。将 noDelay 设置为 true,会在每次调用 socket.write() 时立即发出数据。noDelay 默认为 true。
返回 socket。
socket.setKeepAlive([enable][, initialDelay])
启用/禁用保持活跃功能,并且可以在空闲的 socket 发送第一个存活探测之前选择性地设置初始延迟。enable 默认为 false。
通过 initialDelay(以毫秒为单位)设置接收到的最后一个数据包和第一个存活探测之间的延迟。将 initialDelay 设置为 0,会改变默认(或之前)设置的值。默认为 0。
返回 socket。
socket.connect(path[, connectListener])
socket.connect(port[, host][, connectListener])
类似 socket.connect(options[, connectListener]),其选项为 {port: port, host: host} 或 {path: path}。
socket.connect(options[, connectListener])
打开一个给定的 socket 连接。
对于 TCP sockets 而言,options 参数应该是一个特定的对象:
port:应该连接到客户端端口(必需)。host:应该连接到客户端主机。默认为'localhost'。localAddress:绑定到用于网络连接的本地接口。localPort:绑定到用于网络连接的本地端口。family:IP 协议栈的版本。默认为4。hints:dns.lookup() 提示。默认为0。lookup:自定义查找功能。默认为dns.lookup。
对于本地域 sockets,options 参数应该是一个特定的对象:
path:应该连接到客户端路径(必需)。
通常不需要这种方法,作为 net.createConnection 打开 socket。只有当你要实现自定义的 Socket 时使用此功能。
此函数是异步的。当 'connect' 事件发出时,会建立 socket。如果连接有问题,不会发出 'connect' 事件,将带着异常发出 'error' 事件。
connectListener 参数将被添加为 'connect' 事件的监听器。
socket.write(data[, encoding][, callback])
发送 socket 上的数据。第二个参数在 data 为字符串的情况下用于指定编码——默认为 UTF8 编码。
如果整个数据被成功刷新到内核缓冲区,则返回 true。如果全部或部分的数据还在用户内存队列中,则返回 false。当 buffer 再次清空时会发出 'drain' 事件。
当数据最终被写入时,可选的 callback 参数将被执行——这可能不会立即执行。
socket.pause()
暂停读取数据。即不会发出 'data' 事件。对于上传节流非常有用。
socket.resume()
在调用 pause() 后恢复读取。
socket.end([data][, encoding])
半关闭 socket。如,它发送一个 FIN 包。服务器仍然可能会发送一些数据。
如果指定了 data,这等同于在 socket.end() 后调用 socket.write(data, encoding)。
socket.destroy()
确保没有更多的 I/O 活动发生此 socket 上。只有在错误(解析错误)的情况下有必要。
socket.address()
返回绑定的地址,socket 的地址族名称和端口由操作系统所决定。返回一个具有三个属性的对象,如 { port: 12346, family: 'IPv4', address: '127.0.0.1' }。
socket.unref()
在 socket 中调用 unref,如果这是在事件系统中唯一活跃的 socket,将允许程序退出。如果 socket 已经 unrefd,再次调用 unref 将没有效果。
返回 socket。
socket.ref()
与 unref 相反,在一个先前 unrefdd socket 上调用 ref,如果它是唯一剩下的 socket(默认行为),将不会让程序退出。如果 socket 已经 refd,再次调用 ref 将没有效果。
返回 socket。