浅谈长连接keepalive和套接字重用reuse对高并发的影响

做采集系统有两年了,第一年主要的设计和代码逻辑是别人写的。但是问题很多。

第二年真正由我接手后,修复了大量的业务逻辑。

遇到的一个核心问题就是数据丢失。最近客户也在问我采集上报的机制,是否使用长连接?我自己联想到套接字的reuse问题。

由于所作的这个项目有两千万的用户量,高峰期tcp连接达到15000到30000并发是每天都会发生的事情。

开始怀疑是这个机制设计得有问题。

再仔细回忆之前学C套接字时的资料,reuse机制是服务端的监听端口时用到的参数,并不会影响客户端SDK的断开重连,实际修改thrift源码测试发现也是如此。结论是reuse只影响服务端,不影响客户端的tcp连接。

而keep alive是http1.1的机制,它是一个http数据包的报头。带有这个报头的http通信就会维持长连接,数据没有数据通信,也会发送带有keepalive报头用来保活的空连接数据包。而我所用的采集系统使用TCP连接。

所以数据丢失跟这两个细节无关。

原文地址:https://www.cnblogs.com/geektcp/p/9998558.html

时间: 2024-07-30 18:32:15

浅谈长连接keepalive和套接字重用reuse对高并发的影响的相关文章

浅谈MyBatis3连接池

1.在spring中注入MyBatis自带连接池的时候,仅仅只是设置上了一些数据库连接的必要数据,比如driver.url.username.password等,并不会去连接数据库 2.Mybatis连接池的状态都是由PoolState这个类来维护的,最重要的就是两个list:idleConnections.activeConnections,分别用来保存空闲连接和活动连接,这个PoolState对象在使用过程中需要同步 3.PooledConnection也就是连接池里维护的连接对象,这个类里

基于UDP协议的socket套接字编程 基于socketserver实现并发的socket编程

基于UDP协议 的socket套接字编程 1.UDP套接字简单示例 1.1服务端 import socket server = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # 建立一个UDP协议的服务器 server.bind(("127.0.0.1",8080)) while True: data,addr = server.recvfrom(1024) server.sendto(data.upper(),addr) server

15套java互联网架构师、高并发、集群、负载均衡、高可用、数据库设计、缓存、性能优化、大型分布式 项目实战视频教程

* { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩 展.高性能.高并发.性能优化.Spring boot.Redis.ActiveMQ.Nginx.Mycat.Netty.Jvm大型分布 式项目实战视频教程 视频课程包含: 高级Java架构师包含:Spring boot.Spring  cloud.Dubbo.Redis.ActiveMQ.Nginx.Mycat

浅谈外连接中的on条件字句

在简单的项目中使用的一般就是内连接,可是在实际系统级项目中外连接就非经常见了.在外连接的使用中,本人发现有一个非常多人都弄不清楚的问题,关于外连接中on的带值条件字句的作用. 当在内连接查询中增加条件是,不管是将它增加到join子句.还是增加到where子句,其效果是全然一样的.但对于外连接情况就不同了.当把条件增加到join子句时.SQL Server.Informix会返回外连接表的所有行,然后使用指定的条件返回第二个表的行.假设将条件放到where子句中,SQL Server将会首先进行连

Centos5.5 无法连接MKS:套接字连接尝试次数太多

Q:启动虚拟机是报错 A:有可能是VMWare Authorization Server服务关闭了,启动该服务即可 原文地址:https://www.cnblogs.com/cpbm/p/11616920.html

进阶版socket套接字ftp文件传输可并发

server import socketserver import json import struct class Mytcp(socketserver.BaseRequestHandler): def handle(self): try: while True: data_path = self.request.recv(1024) data = str(data_path,encoding='utf8') print(data_path) with open(data,'rb') as f

Web服务器和动态语言如何交互--CGI&FastCGI&FPM浅谈

一个用户的Request是如何经过Web服务器(Apache,Nginx,IIS,Light)与后端的动态语言(如PHP等)进行交互并将结果返回给用户的呢? 本文浅谈个人观点,可能有误,欢迎拍砖,共同学习. 一. 首先明确几个概念,以便后续说明 CGI:(Common Gateway Interface)Http服务器与后端程序(如PHP)进行交互的中间层. 工作原理及处理方式(fork-and-execute模式): 1.当Web Server有Request到达 2.fork一个CGI进程或

web服务器长连接

web服务器都提供长连接的方式,所谓长连接就是客户端一次请求完后,不关闭连接,保持一段时间的连接,下次此客户端再次请求时,不用创建新连接,复用所保持的连接即可.从理论上,长连接可以免去大量建立和关闭连接的资源消耗,但同时也有大量连接被占用的代价.因此可以初步判断长连接比短连接能带来更高的TPS,更低的CPU消耗,更少的IO,更高的内存占用,下面通过实战来验证. 服务器环境和测试工具可以见工具和环境准备篇 本次web服务器选用apache prefork模式,apache长短连接的选择可以配置ht

Linux/UNIX套接字连接

套接字连接 套接字是一种通信机子.凭借这样的机制.客户/server系统的开发工作既能够在本地单机上进行.也能够夸网络进行. 套接字的创建和使用与管道是有差别的.由于套接字明白地将客户和server区分开来. 套接字连接: 首先,server应用程序用系统调用socket来创建一个套接字,它是系统分配给该server进程的类似文件描写叙述符的资源,它不能与其它进程共享. 接下来.server进程会给套接字起个名字.本地套接字的名字是Linux文件系统中的文件名称,对于网络套接字它的名字是与客户连