socket.connect(options[, connectListener])


在给定套接字上启动连接。通常不需要此方法,应使用 net.createConnection() 创建并打开套接字。仅在实现自定义套接字时使用它。

¥Initiate a connection on a given socket. Normally this method is not needed, the socket should be created and opened with net.createConnection(). Use this only when implementing a custom Socket.

对于 TCP 连接,可用的 options 是:

¥For TCP connections, available options are:

  • port <number> 必需的。套接字应连接到的端口。

    ¥port <number> Required. Port the socket should connect to.

  • host <string> 套接字应连接到的主机。默认值:'localhost'

    ¥host <string> Host the socket should connect to. Default: 'localhost'.

  • localAddress <string> 套接字应该连接的本地地址。

    ¥localAddress <string> Local address the socket should connect from.

  • localPort <number> 套接字应连接的本地端口。

    ¥localPort <number> Local port the socket should connect from.

  • family <number> :IP 栈的版本。必须是 460。值 0 表示允许使用 IPv4 和 IPv6 地址。默认值:0

    ¥family <number>: Version of IP stack. Must be 4, 6, or 0. The value 0 indicates that both IPv4 and IPv6 addresses are allowed. Default: 0.

  • hints <number> 可选 dns.lookup() 提示

    ¥hints <number> Optional dns.lookup() hints.

  • lookup <Function> 自定义查找函数。默认值:dns.lookup()

    ¥lookup <Function> Custom lookup function. Default: dns.lookup().

  • noDelay <boolean> 如果设置为 true,则它会在套接字建立后立即禁用 Nagle 算法。默认值:false

    ¥noDelay <boolean> If set to true, it disables the use of Nagle's algorithm immediately after the socket is established. Default: false.

  • keepAlive <boolean> 如果设置为 true,则它会在连接建立后立即在套接字上启用保持活动功能,类似于在 socket.setKeepAlive([enable][, initialDelay]) 中所做的。默认值:false

    ¥keepAlive <boolean> If set to true, it enables keep-alive functionality on the socket immediately after the connection is established, similarly on what is done in socket.setKeepAlive([enable][, initialDelay]). Default: false.

  • keepAliveInitialDelay <number> 如果设置为正数,则设置在空闲套接字上发送第一个保活探测之前的初始延迟。默认值:0

    ¥keepAliveInitialDelay <number> If set to a positive number, it sets the initial delay before the first keepalive probe is sent on an idle socket.Default: 0.

  • autoSelectFamily <boolean> :如果设置为 true,它会启用一个家庭自动检测算法,该算法松散地实现了 RFC 8305 的第 5 节。传递给 lookup 的 all 选项设置为 true,套接字会依次尝试连接到所有获得的 IPv6 和 IPv4 地址,直到建立连接。首先尝试返回的第一个 AAAA 地址,然后是第一个返回的 A 地址,然后是第二个返回的 AAAA 地址,依此类推。在超时和尝试下一个地址之前,每次连接尝试都会获得 autoSelectFamilyAttemptTimeout 选项指定的时间量。如果 family 选项不是 0 或设置了 localAddress,则忽略。如果至少有一个连接成功,则不会触发连接错误。默认值:最初为 false,但可以在运行时使用 net.setDefaultAutoSelectFamily(value) 或通过命令行选项 --enable-network-family-autoselection 进行更改。

    ¥autoSelectFamily <boolean>: If set to true, it enables a family autodetection algorithm that loosely implements section 5 of RFC 8305. The all option passed to lookup is set to true and the sockets attempts to connect to all obtained IPv6 and IPv4 addresses, in sequence, until a connection is established. The first returned AAAA address is tried first, then the first returned A address, then the second returned AAAA address and so on. Each connection attempt is given the amount of time specified by the autoSelectFamilyAttemptTimeout option before timing out and trying the next address. Ignored if the family option is not 0 or if localAddress is set. Connection errors are not emitted if at least one connection succeeds. Default: initially false, but it can be changed at runtime using net.setDefaultAutoSelectFamily(value) or via the command line option --enable-network-family-autoselection.

  • autoSelectFamilyAttemptTimeout <number> :使用 autoSelectFamily 选项时在尝试下一个地址之前等待连接尝试完成的时间量(以毫秒为单位)。如果设置为小于 10 的正整数,则将使用值 10。默认值:最初是 250,但可以在运行时使用 net.setDefaultAutoSelectFamilyAttemptTimeout(value) 进行更改

    ¥autoSelectFamilyAttemptTimeout <number>: The amount of time in milliseconds to wait for a connection attempt to finish before trying the next address when using the autoSelectFamily option. If set to a positive integer less than 10, then the value 10 will be used instead. Default: initially 250, but it can be changed at runtime using net.setDefaultAutoSelectFamilyAttemptTimeout(value)

对于 IPC 连接,可用的 options 是:

¥For IPC connections, available options are:

对于这两种类型,可用的 options 包括:

¥For both types, available options include:

  • onread <Object> 如果指定,传入的数据存储在单个 buffer 中,并在数据到达套接字时传给提供的 callback。这将导致流式传输功能不提供任何数据。套接字将像往常一样触发 'error''end''close' 等事件。pause()resume() 之类的方法也将按预期运行。

    ¥onread <Object> If specified, incoming data is stored in a single buffer and passed to the supplied callback when data arrives on the socket. This will cause the streaming functionality to not provide any data. The socket will emit events like 'error', 'end', and 'close' as usual. Methods like pause() and resume() will also behave as expected.

    • buffer <Buffer> | <Uint8Array> | <Function> 用于存储传入数据的可重用内存块或返回此类数据的函数。

      ¥buffer <Buffer> | <Uint8Array> | <Function> Either a reusable chunk of memory to use for storing incoming data or a function that returns such.

    • callback <Function> 为每个传入数据块调用此函数。传递给它的两个参数:写入 buffer 的字节数和对 buffer 的引用。从此函数返回 false 以隐式 pause() 套接字。该函数将在全局上下文中执行。

      ¥callback <Function> This function is called for every chunk of incoming data. Two arguments are passed to it: the number of bytes written to buffer and a reference to buffer. Return false from this function to implicitly pause() the socket. This function will be executed in the global context.

以下是使用 onread 选项的客户端示例:

¥Following is an example of a client using the onread option:

const net = require('node:net');
net.connect({
  port: 80,
  onread: {
    // Reuses a 4KiB Buffer for every read from the socket.
    buffer: Buffer.alloc(4 * 1024),
    callback: function(nread, buf) {
      // Received data is available in `buf` from 0 to `nread`.
      console.log(buf.toString('utf8', 0, nread));
    },
  },
});