阿西河

所有教程

公众号
🌙
阿西河前端的公众号

我的收藏

    最近访问  (文章)

      教程列表

      抓包专区
      测试专区

      Node.js server.listen

      server.listen()

      为 connections 启动一个 server 监听. 一个 net.Server 可以是一个 TCP 或者 一个 IPC server,这取决于它监听什么。

      可能的参数:

      • server.listen(handle[, backlog][, callback])
      • server.listen(options[, callback])
      • server.listen(path[, backlog][, callback]) for IPC servers
      • [server.listen([port][, host][, backlog][, callback])][server.listen(port, host)] for TCP servers

      这个函数是异步的。当 server 开始监听,‘listening’ 事件会触发。最后一个参数 callback 将会被添加为’listening' 事件的监听器。

      所有的 listen() 方法可以传入一个 backlog 参数来指定待连接队列的最大长度。 实际长度将通过 OS 的 sysctl 设置, 例如 linux 里的 tcp_max_syn_backlog 和 somaxconn。 这个参数的默认值是511 (不是512)

      说明:

      • 所有的 net.Socket 都被设置为 SO_REUSEADDR (详见 [socket(7)][])
      • server.listen() 方法可能会被调用多次。每个后续的调用都将使用其提供的选项重新打开服务器。

      监听时,其中一个最常见的错误是 EADDRINUSE。这是因为另一个 server 已经监听了该请求中的 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() 的通用参数
      • Returns: < net.Server>

      启动一个服务器,监听已经绑定到端口、UNIX 域套接字或 Windows 命名管道的给定句柄上的连接。

      句柄对象可以是服务器、套接字(任何具有底层 _handle 成员的东西),也可以是具有 fd 成员的对象,该成员是一个有效的文件描述符。

      注意:在Windows上不支持在文件描述符上进行监听。

      server.listen(options[, callback])

      新增于: v0.11.14

      • options < Object> 必须。支持以下参数属性: * port < number>
        • host < string> path < string> 如果指定了 port 参数则会被忽略。查看 Identifying paths for IPC connections。 backlog < number> server.listen() 的通用参数。 * exclusive < boolean> 默认 false。
      • callback < Function> server.listen() 的通用参数。
      • Returns: < net.Server>

      如果指定了 port 参数,该方法的行为跟 [server.listen([port][, hostname][, backlog][, callback])][server.listen(port, host)] 一样。否则,如果指定了 path 参数,该方法的行为与 server.listen(path[, backlog][, callback]) 一致。如果没有 port 或者 path 参数,则会抛出一个错误。

      如果 exclusive 是 false(默认),则集群的所有进程将使用相同的底层句柄,允许共享连接处理任务。如果 exclusive 是 true,则句柄不会被共享,如果尝试端口共享将导致错误。监听独立端口的例子如下。

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

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

      新增于: v0.1.90

      • path < string> 服务器需要监听的路径。查看 Identifying paths for IPC connections。
      • backlog < number> server.listen() 通用参数。
      • callback < Function> server.listen() 通用参数。
      • Returns: < 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() 函数的通用参数
      • Returns: < net.Server>

      启动一个TCP服务监听输入的port和host。

      如果port省略或是0,系统会随意分配一个在’listening’事件触发后能被server.address().port检索的无用端口。

      如果host省略,如果IPv6可用,服务器将会接收基于unspecified IPv6 address (::)的连接,否则接收基于unspecified IPv4 address (0.0.0.0)的连接

      注意: 在大多数的系统, 监听unspecified IPv6 address (::)可能导致net.Server也监听unspecified IPv4 address (0.0.0.0).


      更多内容请参考:Node.js net 网络,或者通过 点击对应菜单 进行查看;


      目录
      目录