server.listen(options[, callback])


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

    ¥options <Object> Required. Supports the following properties:

    • backlog <number> server.listen() 函数的通用参数。

      ¥backlog <number> Common parameter of server.listen() functions.

    • exclusive <boolean> 默认值:false

      ¥exclusive <boolean> Default: false

    • host <string>

    • ipv6Only <boolean> 对于 TCP 服务器,将 ipv6Only 设置为 true 将禁用双栈支持,即绑定到主机 :: 不会绑定 0.0.0.0。默认值:false

      ¥ipv6Only <boolean> For TCP servers, setting ipv6Only to true will disable dual-stack support, i.e., binding to host :: won't make 0.0.0.0 be bound. Default: false.

    • reusePort <boolean> 对于 TCP 服务器,将 reusePort 设置为 true 允许同一主机上的多个套接字绑定到同一端口。传入连接由操作系统分发到监听套接字。此选项仅在某些平台上可用,例如 Linux 3.9+、DragonFlyBSD 3.6+、FreeBSD 12.0+、Solaris 11.4 和 AIX 7.2.5+。默认值:false

      ¥reusePort <boolean> For TCP servers, setting reusePort to true allows multiple sockets on the same host to bind to the same port. Incoming connections are distributed by the operating system to listening sockets. This option is available only on some platforms, such as Linux 3.9+, DragonFlyBSD 3.6+, FreeBSD 12.0+, Solaris 11.4, and AIX 7.2.5+. Default: false.

    • path <string> 如果指定了 port,则将被忽略。参见 识别 IPC 连接的路径

      ¥path <string> Will be ignored if port is specified. See Identifying paths for IPC connections.

    • port <number>

    • readableAll <boolean> 对于 IPC 服务器,使管道对所有用户都可读。默认值:false

      ¥readableAll <boolean> For IPC servers makes the pipe readable for all users. Default: false.

    • signal <AbortSignal> 可用于关闭监听服务器的中止信号。

      ¥signal <AbortSignal> An AbortSignal that may be used to close a listening server.

    • writableAll <boolean> 对于 IPC 服务器,使管道对所有用户都可写。默认值:false

      ¥writableAll <boolean> For IPC servers makes the pipe writable for all users. Default: false.

  • callback <Function> 函数。

    ¥callback <Function> functions.

  • 返回:<net.Server>

    ¥Returns: <net.Server>

如果指定了 port,则其行为与 server.listen([port[, host[, backlog]]][, callback]) 相同。否则,如果指定了 path,则其行为与 server.listen(path[, backlog][, callback]) 相同。如果未指定它们,则会抛出错误。

¥If port is specified, it behaves the same as server.listen([port[, host[, backlog]]][, callback]). Otherwise, if path is specified, it behaves the same as server.listen(path[, backlog][, callback]). If none of them is specified, an error will be thrown.

如果 exclusivefalse(默认值),那么集群工作者将使用相同的底层句柄,允许共享连接处理职责。当 exclusivetrue 时,句柄未共享,尝试端口共享会导致错误。下面显示了一个监听独占端口的示例。

¥If exclusive is false (default), then cluster workers will use the same underlying handle, allowing connection handling duties to be shared. When exclusive is true, the handle is not shared, and attempted port sharing results in an error. An example which listens on an exclusive port is shown below.

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

exclusivetrue 且底层 handle 共享时,有可能多个 worker 查询一个 handle 具有不同的积压。在这种情况下,将使用传递给主进程的第一个 backlog

¥When exclusive is true and the underlying handle is shared, it is possible that several workers query a handle with different backlogs. In this case, the first backlog passed to the master process will be used.

以 root 身份启动 IPC 服务器可能会导致非特权用户无法访问服务器路径。使用 readableAllwritableAll 将使所有用户都可以访问服务器。

¥Starting an IPC server as root may cause the server path to be inaccessible for unprivileged users. Using readableAll and writableAll will make the server accessible for all users.

如果启用了 signal 选项,在对应的 AbortController 上调用 .abort() 类似于在服务器上调用 .close()

¥If the signal option is enabled, calling .abort() on the corresponding AbortController is similar to calling .close() on the server:

const controller = new AbortController();
server.listen({
  host: 'localhost',
  port: 80,
  signal: controller.signal,
});
// Later, when you want to close the server.
controller.abort();