随笔 - 32  文章 - 4  评论 - 0  阅读 - 48735
 

1. TCP连接

当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次握手的,而释放则需要4次握手,所以说每个连接的建立都是需要资源消耗和时间消耗的

经典的三次握手示意图:

 

经典的四次握手关闭图:

2. TCP短连接

我们模拟一下TCP短连接的情况,client向server发起连接请求,server接到请求,然后双方建立连接。client向server发送消息,server回应client,然后一次读写就完成了,这时候双方任何一个都可以发起close操作,不过一般都是client先发起close操作。为什么呢,一般的server不会回复完client后立即关闭连接的,当然不排除有特殊的情况。从上面的描述看,短连接一般只会在client/server间传递一次读写操作

短连接的优点是:管理起来比较简单,存在的连接都是有用的连接,不需要额外的控制手段

3.TCP长连接

接下来我们再模拟一下长连接的情况,client向server发起连接,server接受client连接,双方建立连接。Client与server完成一次读写之后,它们之间的连接并不会主动关闭,后续的读写操作会继续使用这个连接。

首先说一下TCP/IP详解上讲到的TCP保活功能,保活功能主要为服务器应用提供,服务器应用希望知道客户主机是否崩溃,从而可以代表客户使用资源。如果客户已经消失,使得服务器上保留一个半开放的连接,而服务器又在等待来自客户端的数据,则服务器将应远等待客户端的数据,保活功能就是试图在服务器端检测到这种半开放的连接。

如果一个给定的连接在两小时内没有任何的动作,则服务器就向客户发一个探测报文段,客户主机必须处于以下4个状态之一:

  1. 客户主机依然正常运行,并从服务器可达。客户的TCP响应正常,而服务器也知道对方是正常的,服务器在两小时后将保活定时器复位。
  2. 客户主机已经崩溃,并且关闭或者正在重新启动。在任何一种情况下,客户的TCP都没有响应。服务端将不能收到对探测的响应,并在75秒后超时。服务器总共发送10个这样的探测 ,每个间隔75秒。如果服务器没有收到一个响应,它就认为客户主机已经关闭并终止连接。
  3. 客户主机崩溃并已经重新启动。服务器将收到一个对其保活探测的响应,这个响应是一个复位,使得服务器终止这个连接。
  4. 客户机正常运行,但是服务器不可达,这种情况与2类似,TCP能发现的就是没有收到探查的响应。

从上面可以看出,TCP保活功能主要为探测长连接的存活状况,不过这里存在一个问题,存活功能的探测周期太长,还有就是它只是探测TCP连接的存活,属于比较斯文的做法,遇到恶意的连接时,保活功能就不够使了。

在长连接的应用场景下,client端一般不会主动关闭它们之间的连接,Client与server之间的连接如果一直不关闭的话,会存在一个问题,随着客户端连接越来越多,server早晚有扛不住的时候,这时候server端需要采取一些策略,如关闭一些长时间没有读写事件发生的连接,这样可以避免一些恶意连接导致server端服务受损;如果条件再允许就可以以客户端机器为颗粒度,限制每个客户端的最大长连接数,这样可以完全避免某个蛋疼的客户端连累后端服务。

长连接和短连接的产生在于client和server采取的关闭策略,具体的应用场景采用具体的策略,没有十全十美的选择,只有合适的选择。

参考:

1. TCP/IP详解 卷一

转自: http://www.cnblogs.com/beifei/archive/2011/06/26/2090611.html

posted @ 2014-05-21 13:07 爱学习的小灵子 阅读(384) 评论(0) 推荐(0) 编辑
 
摘要: 网络中数据传输经常是xml或者json,现在做的一个项目之前调其他系统接口都是返回的xml格式,刚刚遇到一个返回json格式数据的接口,通过例子由易到难总结一下处理过程,希望能帮到和我一样开始不会的朋友。 1.json简单对象 json数据: {"result":"0","res_info":"ok 阅读全文
posted @ 2014-03-11 15:46 爱学习的小灵子 阅读(33763) 评论(0) 推荐(2) 编辑
 
摘要: 在工作过程中遇到了这个问题,在网上查了一些资料,结合自己的解决方法及解决过程总结了下,方面以后查阅。如果能帮到同样遇到这个问题的你,将非常高兴哦~_~ 由于asp.net中的Image控件是在System.Web.UI.WebControls命名空间中,所以不能像在winform中那样通过byte[ 阅读全文
posted @ 2013-12-11 10:46 爱学习的小灵子 阅读(2525) 评论(0) 推荐(2) 编辑
  2022年11月30日
摘要: ​ 重新系统学习c++语言,并将学习过程中的知识在这里抄录、总结、沉淀。同时希望对刷到的朋友有所帮助,一起加油哦! 每一次学习都是为了追求智慧! 写在前面,本篇章主要介绍STL中常用算法。 算法主要由头文件<algorithm><functional><numeric>组成。 <algorithm> 阅读全文
posted @ 2022-11-30 16:47 爱学习的小灵子 阅读(51) 评论(0) 推荐(0) 编辑
  2022年11月28日
摘要: ​ 重新系统学习c++语言,并将学习过程中的知识在这里抄录、总结、沉淀。同时希望对刷到的朋友有所帮助,一起加油哦! 每一次学习都是为了追求智慧! 写在前面,本篇章主要介绍STL中常用容器函数对象。 1.1 函数对象 1.1.1 函数对象概念 概念: 重载函数调用操作符的类,称为函数对象。 函数对象使 阅读全文
posted @ 2022-11-28 18:48 爱学习的小灵子 阅读(39) 评论(0) 推荐(0) 编辑
摘要: ​ 重新系统学习c++语言,并将学习过程中的知识在这里抄录、总结、沉淀。同时希望对刷到的朋友有所帮助,一起加油哦! 每一次学习都是为了追求智慧! 写在前面,本篇章主要介绍STL中常用容器map/multimap。 1.1 map基本概念 简介: map中所有元素都为键值对,即pair; pair中第 阅读全文
posted @ 2022-11-28 15:14 爱学习的小灵子 阅读(45) 评论(0) 推荐(0) 编辑
摘要: ​ 重新系统学习c++语言,并将学习过程中的知识在这里抄录、总结、沉淀。同时希望对刷到的朋友有所帮助,一起加油哦! 每一次学习都是为了追求智慧! 写在前面,本篇章主要介绍STL中常用容器set/multiset。 1.1 set基本概念 本质: set和multiset,属于关联式容器,底层结构是用 阅读全文
posted @ 2022-11-28 13:40 爱学习的小灵子 阅读(54) 评论(0) 推荐(0) 编辑
  2022年11月25日
摘要: ​ 重新系统学习c++语言,并将学习过程中的知识在这里抄录、总结、沉淀。同时希望对刷到的朋友有所帮助,一起加油哦! 生命就像一朵花,要拼尽全力绽放!死磕自个儿,身心愉悦! 写在前面,本篇章主要介绍STL中常用容器list。 1.1 list基本概念 功能:将数据进行链式存储。 链表list 的数据存 阅读全文
posted @ 2022-11-25 17:59 爱学习的小灵子 阅读(53) 评论(0) 推荐(0) 编辑
  2022年11月24日
摘要: ​ 重新系统学习c++语言,并将学习过程中的知识在这里抄录、总结、沉淀。同时希望对刷到的朋友有所帮助,一起加油哦! 生命就像一朵花,要拼尽全力绽放!死磕自个儿,身心愉悦! 写在前面,本篇章主要介绍STL中常用容器queue。 1.1 queue的基本概念 概念: queue是一种先进先出(First 阅读全文
posted @ 2022-11-24 22:13 爱学习的小灵子 阅读(24) 评论(0) 推荐(0) 编辑
摘要: ​ 重新系统学习c++语言,并将学习过程中的知识在这里抄录、总结、沉淀。同时希望对刷到的朋友有所帮助,一起加油哦! 生命就像一朵花,要拼尽全力绽放!死磕自个儿,身心愉悦! 写在前面,本篇章主要介绍STL中常用容器stack。 1.1 stack的基本概念 概念: 栈容器。 stack是一种先进后出( 阅读全文
posted @ 2022-11-24 11:35 爱学习的小灵子 阅读(24) 评论(0) 推荐(0) 编辑
摘要: ​ 重新系统学习c++语言,并将学习过程中的知识在这里抄录、总结、沉淀。同时希望对刷到的朋友有所帮助,一起加油哦! 生命就像一朵花,要拼尽全力绽放!死磕自个儿,身心愉悦! 写在前面,本篇章主要介绍STL中常用容器deque。 1.1 deque的基本概念 功能: 双端数组,可以对头端尾端进行插入和删 阅读全文
posted @ 2022-11-24 11:34 爱学习的小灵子 阅读(26) 评论(0) 推荐(0) 编辑
摘要: ​ 重新系统学习c++语言,并将学习过程中的知识在这里抄录、总结、沉淀。同时希望对刷到的朋友有所帮助,一起加油哦! 生命就像一朵花,要拼尽全力绽放!死磕自个儿,身心愉悦! 写在前面,本篇章主要介绍STL中常用容器vector。 1.1 vector的基本概念 vector数据结构和数组非常相似,也称 阅读全文
posted @ 2022-11-24 11:34 爱学习的小灵子 阅读(36) 评论(0) 推荐(0) 编辑
摘要: ​ 重新系统学习c++语言,并将学习过程中的知识在这里抄录、总结、沉淀。同时希望对刷到的朋友有所帮助,一起加油哦! 生命就像一朵花,要拼尽全力绽放!死磕自个儿,身心愉悦! 写在前面,本篇章主要介绍STL中常用容器string。 1.1 string的基本概念 本质: string是c++风格的字符串 阅读全文
posted @ 2022-11-24 11:33 爱学习的小灵子 阅读(23) 评论(0) 推荐(0) 编辑
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示