JAVA 网络长短连接

news/2024/7/15 16:28:01 标签: netty, java, 网络

   作为java的刚開始学习的人,看了网上的资料后,关于java的长短连接,感觉理解的不是非常深刻。结合自己的学习和网上的资料整理例如以下。不对之处请大家批评指正。


                事实上作为java语言本身而言,可以提供给我们使用的终于的网络接口实际也就是java的Socket API。除此外别无他物。 所以我们常常提到的HTTP和Netty 长短连接实际都是针对的java Socket而言的,大家都学过网络的7层模型,可是在JAVA中7层模型显的过于的复杂,大多数的层。我们无法直接感知。

实际简化为例如以下的图是较为准确的:

              HTTP的长短连接:    

     何为HTTP长连接,准确的说HTTP是无状态的连接,每一次请求完毕后。实际client和server端在应用层是没有不论什么连接的,也就是所谓的每一次请求建立一次连接,无状态的,可是为什么还有HTTP长连接之说呢?那是由于HTTP作为应用层的协议事实上际依赖的是底层的TCP协议,TCP协议大家都很的熟悉也就是三次握手的可靠连接,能够多次可靠的传递IP数据包。所以在HTTP的协议中,有一个属性是:Connection:keep-alive。设置了该属性则是浏览器告诉server请使用HTTP长连接方式,实际也就是TCP长连接,也就是浏览器实际和server之间在完毕一次HTTP请求后并没有真正的关闭底层Socket连接,下一次的请求还是继续的使用这个连接。

   以Tomcat为样例,实际Tomcat 在HTPP长连接方式下。当一个新的HTTP请求来临则打开一个Socket处理请求完成后,TOMCAT并没有马上调用java 关闭Socket的方法关闭连接,而是维持了这个连接,当然此时假设浏览器关闭了,那这个TCP链路也就关闭了(关于怎样维持一个TCP连接不中断,这个超出的本文的讨论范围,仅仅须要记住仅仅要没有显式去关闭已创建的Socket连接,则保持着TCP的连接)。大家知道网络资源也是非常珍贵的。所以Tomcat不能一直维持着这个连接。当上次请求时间大于用户设置的Session 有效时间到来时,则会主动关闭这个连接。这个时间是能够设置的。

当然也能够不设置这个字段,那实际就是告诉server,请每次创建连接,一次请求后则直接关闭,这样的情况是相当的耗费资源的。实际也就是HTTP的短连接。Tomcat等都是默认的TCP长连接。

         JAVA NIO的长短连接:

          JAVA的NIO 大家都很的熟悉了。基于NIO的netty等传输协议也是很的多,这些框架都号称实现了长连接,实际其依赖的网络底层依然是java的Socket 接口。事实上也就是在传输的过程中,java的Socket并没有随着传输数据的完毕而关闭,而是一直维持着这个TCP的连接,等下次使用依然使用这个连接(同上。关于怎样维持TCP的长连接超出的本文的讨论范围)。而以netty为样例,是支持用户指定初始化方式的,即类似于HTTP。能够设置是使用长连接还是短连接。在netty的服务端和client均能够设置一个參数: bootstrap.setOption("child.keepAlive", true);   就是告诉netty在传输数据完毕后。不要马上关闭底层的连接。

       附:

      关于底层是怎样维持TCP长连接的。能够參考《TCP/IP具体解释》一书。有具体的介绍。

总之就是server和client之间建立一个探測心跳,不断的侦断对方是否依然存在,假设没有收到对方的反馈信息,能够觉得对方的连接已经断了,那么server会考虑关闭TCP连接,假设对方在一定的时间又发送了侦断信息。则觉得又连接上了。


     总之,通过TCP的长连接,维持了一个相应用层透明的链路,应用层能够重复的使用这个链路数据传输,而保存高效,避免了三次握手建立连接和四次握手关闭连接所带来的资源浪费和资源消耗。



http://www.niftyadmin.cn/n/1446065.html

相关文章

链表基础知识和相关操作

一、链表的类型 1.单链表 入口点为链表的头结点(head),链表中每个节点存储该结点的内容(数据)以及下一个节点的指针。 2.双链表 每个节点有两个指针域,一个指向该结点前一节点,另一个指向该结点后一节点,此种链表既可向前查询也…

浅析DW4中的站点管理(转)

Check In/Out功能简介:该功能是专门针对多用户管理而预设的。矣即多用户使用多帐号管理同一站点。该功能的强大之处在于,当多人同时登陆站点进行同步更新时,对方用户所指定修改的内容将被锁定,其他用户不能更改这部分内容。同时&a…

lightoj1030_期望

题目链接:http://lightoj.com/volume_showproblem.php?problem1030 题目大意:在一个1*N的格子里,每个格子都有相应的金币数,走到相应格子的话,就会得到该格子的金币。 现在有一个人在1这个位置&#xff0c…

五险一金

社保 社会保险 (Social Insurance) 是一种为丧失劳动能力、暂时失去劳动岗位或因健康原因造成损失的人口提供收入或补偿的一种社会和经济制度。 社会保险计划由政府举办,强制某一群体将其收入的一部分作为社会保险税(费)形成社会保险基金&…

决不做“肉鸡” 从零开始自检系统漏洞(转)

近来黑客攻击事件频频发生,我们身边的朋友也不断有QQ、E-mail和游戏账号被盗事件发生。现在的黑客技术有朝着大众化方向发展的趋势,能够掌握攻击他人系统技术的人越来越多了,只要你的电脑稍微有点系统Bug或者安装了有问题的应用程序&#xff…

链表常见的5个操作(增删)

链表操作的两种方式: (1)直接对链表进行操作(存在判断是否为头结点的问题) (2)添加虚拟头结点进行操作(不必判断操作对象是否为头结点) 以下使用方式二。 首先定义节…

iOS并排按钮点击联动效果封装

#import <UIKit/UIKit.h>typedef void(^SelectedBlock)(id viewPager, NSInteger index);interface YFViewPager : UIView<UIScrollViewDelegate> {NSArray *_titleArray; /**< 菜单标题 */NSArray *_views; /**< 视图 */NSArray *…

transform,transition,animation 的混合使用——进阶

今天我们来讲述css3能够做成动画的最小独立单元,并且讲述如何使用这些独立的单元来构成一个‘高大尚’的组合动画。 这是我在网上找的一个案例&#xff0c;修改后的效果图&#xff0c;虽说不是特别的‘高大尚’&#xff0c;但我认为这也跟高大尚占了一点边了&#xff0c;中间的…