当前位置: 首页 > 知识库问答 >
问题:

js http服务器:如何获得挂起的套接字连接?

刘奇
2023-03-14

在基本节点http服务器上,如下所示:

var http = require('http');

var server = http.createServer(function(req, res){

  console.log("number of concurr. connections: " + this.getConnections());
  //var pendingConnections = ???

});

server.maxConnections = 500;

server.listen(4000);

如果我一次向服务器发送500个请求,数量是一致的。连接在350附近。由于硬限制设置为500(也net.server.backlog),我想知道在新请求启动时如何访问挂起的连接数(本例中最多150)。

查看node-http,有一个名为connection的事件,因此我认为请求的往返行程如下:

  1. 客户端连接到服务器套接字-->3路握手,套接字持续状态已连接(或已建立?!)然后在节点事件中发出连接
  2. 节点http服务器接受这个挂起的连接,并通过发出request
  3. 开始处理请求

因此,连接的数量必须至少与请求的数量一样大,但对于下面的示例,我无法确认这一点:

var http = require('http');

var activeRequets = 0;
var activeConnections = 0;

var server = http.createServer(function(req, res){

    activeRequests++;
    res.send("foo");

});

server.on('connection', function (socket) {

    socket.setKeepAlive(false);
    activeConnections++;

});

setInterval(function(){

    console.log("activeConns: " + activeConnections + " activeRequests: " + activeRequests);
    activeRequests = 0;
    activeConnections = 0;

}, 500);

server.maxConnections = 1024;
server.listen(4000, '127.0.0.1');

共有1个答案

郦何平
2023-03-14

IIRC您只需计算您正在侦听的特定IP和端口的状态为SYN_RECV的连接数量。您是使用子进程执行netstat和grep(或类似的实用程序)来获取该信息,还是使用*nix C API编写绑定来获取该信息,这取决于您。

 类似资料:
  • 问题内容: 给定具有实验HTTP2支持的最新版本的Node.js: HTTP2服务器: 并对此提出了要求: 它只是挂起并最终说: 如果设置,则错误: 不知道出了什么问题以及为什么到了日志记录的地步。 如果我进入浏览器并访问https:// localhost:8443 ,然后单击警告消息,则它实际上会记录并成功发出请求。但是尚未能够使节点发出请求。 我想将其视为HTTP1服务器,因此不想使用HTT

  • 线程“main”java.net.ConnectException:连接超时:在java.net.dualStackplainsockeTimpl.Connect0(本机方法)在java.net.dualStackplainsockeTimpl.socketConnect(DualStackplainsockeTimpl.java:69)在java.net.abstractplainsockeTi

  • 我正在开发一个与许多客户端连接的服务器。我需要知道客户端何时与服务器断开连接。因此,每个客户端都向服务器发送一个特定的字符。如果两秒钟后没有收到字符,那么我应该断开服务器与客户端的连接(释放为此客户端分配的资源)。 这是我的服务器的主要代码: 第一个问题是,我用来识别在线客户端的方式(每秒发送特定消息)是否是一种好方法? 如果它是好的,我如何使用检测与女巫客户端相关,然后如何断开密钥与服务器的连接

  • 我编写了一个简单的java套接字服务器。我可以使用java客户端连接到它。 但是,当我尝试将android设备连接到它时,它会给出以下错误: 代码如下: 这一行:似乎是罪魁祸首。 错误消息“java.net.socketexception:套接字失败:EACCES(权限被拒绝)” Android java.net.SocketException:套接字失败:EACCES(拒绝权限) Android

  • 真的需要你帮忙。 我的项目是通过电缆连接两台PC机,并使用tcp套接字将客户端文本框形式的字符串发送到服务器。问题是ATI只能发送一个字符串,然后连接就会关闭。 注意:某个端口上的连接将在表单加载中建立并成功。

  • 问题内容: 我正在编写一个Java套接字程序来从服务器读取数据,我无法控制服务器,以下是协议的约定, 2字节:幻数 2字节:数据长度 N字节:ASCII字符串数据有效载荷 大尾数表示幻数和数据长度 例如:如果我的请求是“ command / 1 / getuserlist”,如何构造以上协议的请求匹配并将响应读回到List 我是套接字编程的新手,也不知道如何构建我的请求并读回响应。 有人可以指导我