`

HTTP短连接模拟长连接 连接数不能超过2个

 
阅读更多

项目中有用到服务器推技术,也是由于环境因素,银行系统,行内机房无法向外部公网传输数据,只能外部进来获取。

 

采用Http短连接模拟长连接,后台线程等待不释放资源,直到有后台业务数据为止,期间发现客户端上来的连接只能2个,再建立会报错,还以为是Https造成的,后来看了某个文章,发现这玩意和标准有关系,当时还骂了底层开发人员,因为代码看不到,所以白被我骂了。哈哈

 

基本思路如下:

  1. 服务器端会阻塞请求直到有数据传递或超时才返回。
  2. 客户端 响应处理函数会在处理完服务器返回的信息后,再次发出请求,重新建立连接。
  3. 当客户端处理接收的数据、重新建立连接时,服务器端可能有新的数据到达;这些信息会被服务器端保存直到客户端重新建立连接,客户端会一次把当前服务器端所有的信息取回。

 

后台会涉及多线程编程以及如下问题:

 

使用长连接时,存在一个很常见的场景:客户端网页需要关闭,而服务器端还处在读取数据的堵塞状态,客户端需要及时通知服务器端关闭数据连接。服务器在收到关闭请求后首先要从读取数据的阻塞状态唤醒,然后释放为这个客户端分配的资源,再关闭连接。

所以在设计上,我们需要使客户端的控制请求和数据请求使用不同的 HTTP 连接,才能使控制请求不会被阻塞。

在实现上,如果是基于 iframe 流方式的长连接,客户端页面需要使用两个 iframe,一个是控制帧,用于往服务器端发送控制请求,控制请求能很快收到响应,不会被堵塞;一个是显示帧,用于往服务器端发送长连接请求。如果是基于 AJAX 的长轮询方式,客户端可以异步地发出一个 XMLHttpRequest 请求,通知服务器端关闭数据连接。

在客户和服务器之间保持“心跳”信息

在浏览器与服务器之间维持一个长连接会为通信带来一些不确定性:因为数据传输是随机的,客户端不知道何时服务器才有数据传送。服务器端需要确保当客户端不再工作时,释放为这个客户端分配的资源,防止内存泄漏。因此需要一种机制使双方知道大家都在正常运行。在实现上:

  1. 服务器端在阻塞读时会设置一个时限,超时后阻塞读调用会返回,同时发给客户端没有新数据到达的心跳信息。此时如果客户端已经关闭,服务器往通道写数据会出现异常,服务器端就会及时释放为这个客户端分配的资源。
  2. 如果客户端使用的是基于 AJAX 的长轮询方式;服务器端返回数据、关闭连接后,经过某个时限没有收到客户端的再次请求,会认为客户端不能正常工作,会释放为这个客户端分配、维护的资源。
  3. 当服务器处理信息出现异常情况,需要发送错误信息通知客户端,同时释放资源、关闭连接。

 

分享到:
评论

相关推荐

    基于JMeter模拟1万个终端设备,进行TCP长连接性能测试1

    在本文中,我们将深入探讨如何使用Apache JMeter进行TCP长连接性能测试,特别是在模拟1万个终端设备场景下。首先,我们需要了解的是物联网(IoT)背景下的设备通信协议,这通常涉及身份认证、数据传输等多个步骤。在这...

    长连接和短连接性能测试结果差异.docx

    测试结果显示,当并发线程数相同时,短连接的事务处理速率(TPS,Transactions Per Second)高于长连接,但长连接的资源利用率(特别是CPU)略高于短连接。短连接虽然在TPS上有优势,但在内存消耗上远高于长连接,这...

    连接数测试工具.rar

    它模拟多个并发HTTP请求,测量在特定时间内浏览器可以同时建立的连接数,以评估浏览器的并发处理能力。 2. **ISP连接数测试**:此测试旨在了解你的ISP允许的最大同时连接数。这涉及到TCP/IP协议栈的限制,以及ISP...

    连接数测试工具 用户测试ISP给你多少连接数

    标题中的“连接数测试工具”是指一种用于检测网络连接能力的软件,主要目的是帮助用户了解他们的互联网服务提供商(ISP)实际能提供多少并发连接。在互联网使用中,连接数是个关键参数,它影响到我们同时浏览网页、...

    长连接和短连接性能测试结果差异.pdf

    测试结果显示,尽管短连接的TPS(每秒事务数)略高于长连接,但其响应时间和内存消耗也更高。长连接的资源利用率稍高,尤其是在应用服务器方面,但短连接的内存消耗比长连接高出约58%,这主要是因为短连接频繁的连接...

    长连接和短连接性能测试结果差异 (1).pdf

    在这种场景下,测试人员构建了JAVA脚本,模拟TCP/IP协议下的长连接和短连接进行对比。 测试环境包括不同配置的服务器(DB和APP),运行在Linux和Windows操作系统上,使用Tomcat作为应用服务器,LoadRunner作为测试...

    长连接和短连接性能测试结果差异 (1).docx

    TCP长连接和短连接在性能测试中的差异主要体现在网络资源的使用、响应时间和系统负载上。本次测试通过LoadRunner工具的Java脚本进行模拟,对比了两种连接方式在并发线程数、每秒事务处理量(TPS)以及服务器资源消耗...

    宽带连接数测试工具,宽带压力测试工具,宽带TCP测试工具

    总的来说,宽带连接数测试工具、宽带压力测试工具和宽带TCP测试工具是网络管理员和普通用户诊断和优化网络性能不可或缺的工具。它们帮助我们确保网络的稳定性和速度,从而提升我们的在线体验。对于IT专业人士来说,...

    模拟的Java连接池

    - `maximumPoolSize`:连接池的最大连接数。 - `connectionTimeout`:等待新连接的最大时间,超过这个时间仍未获取到连接,将会抛出异常。 - `idleTimeout`:连接在池中可以空闲的最大时间,超过这个时间将被关闭。 ...

    数字电子技术实验连接图-电路模拟仿真软件MULTISIM V10.0平台

    通过这个实验,学生不仅能掌握数字电子技术的基本原理,还能提升使用电路模拟软件的实际操作技能。同时,"SWUST"可能指的是西南科技大学,这表明该资源可能出自该校的教学资源库,供师生们共同学习和讨论。对于初学...

    Tcp并发测试连接模拟源代码

    例如,通过调整TCP参数(如最大连接数、重传超时、滑动窗口大小等),可以优化服务器处理大量并发连接的能力。 文件“tcpcopy-0.7.0”可能是一个工具包,包含用于复制和镜像网络流量的软件。tcpcopy是一个开源项目...

    模拟地与数字地的连接1

    2. **用电容连接**:电容在电路中起到隔直通交的作用,能隔离直流,允许交流通过。但电容连接可能导致地线浮空,增加静电风险。 3. **用电感连接**:电感可抑制高频噪声,但由于其较大的体积和复杂的杂散参数,可能...

    模拟连接仿真PLC设备的网络映射工具——NetToPLCsim.exe

    NetToPLCsim.exe是一款专为模拟连接仿真PLC(可编程逻辑控制器)设备而设计的网络映射工具。在工业自动化领域,PLC扮演着核心角色,控制着各种机械设备和生产过程。然而,在实际应用前,工程师们需要对PLC程序进行...

    p242- p270 TCP半连接队列和长连接队列

    例如,使用wrk工具对服务器进行压力测试,当并发连接数超过全连接队列最大值(默认为128)时,超出的连接会被丢弃,可以通过`netstat -s`命令查看丢弃连接的累计次数。这种情况可能导致服务器无法处理更多请求,表现...

    redis查看连接数及php模拟并发创建redis连接的方法

    这种方法虽然能模拟并发,但并不推荐在生产环境中使用,因为它可能会导致大量进程堆积,消耗大量系统资源。在实际开发中,更建议使用 PHP 的协程或异步编程库,如 Swoole 或 ReactPHP,它们能更高效地处理并发连接,...

    模拟地、数字地与大地连接方式的处理

    在电子设计中,模拟地和数字地的连接方式是一个至关重要的问题,因为它直接影响到电路的性能和稳定性。本文主要探讨了模拟地、数字地与大地连接的四种常见方法:磁珠连接、电容连接、电感连接以及0欧电阻连接,并...

    模拟地和数字地是不是要隔开?

    在电子硬件设计领域,特别是PCB(Printed Circuit Board,印刷电路板)设计过程中,模拟信号处理部分与数字信号处理部分之间的隔离是一个常见且重要的议题。其中,“模拟地”与“数字地”的处理方式直接影响到电路板...

    Arduino数字IO和模拟IO详解

    **硬件电路连接**:将Arduino的第2脚(即D2)与一个1kΩ的电阻连接,然后将发光二极管(LED)的阴极(短腿)与电阻相连,阳极(长腿)连接到电源正极(VCC)。 **程序代码示例**: ```cpp void setup() { pinMode(2, ...

    数字地和模拟地的分割

    2. **单参考面原则**:确保系统只有一个参考地,避免形成偶极天线效应,即两个独立参考面之间通过长导线连接时所产生的辐射增强现象。 #### 分割数字地与模拟地的挑战 在复杂系统中,简单的数字地与模拟地分割可能...

    Httpbfljcsgj_并发连接测试工具(内网版).rar

    3. **负载模式**:包括持续负载(持续一段时间的恒定并发数)、脉冲负载(短时间内突然增加并发数然后减少)和步进负载(逐步增加并发数)等,以模拟真实世界中的流量波动。 4. **性能指标**:测试结果应包含平均...

Global site tag (gtag.js) - Google Analytics