Socket长连接与短连接
长连接与短连接
所谓长连接,指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发检测包以维持此连接,一般需要自己做在线维持。
短连接是指通信双方有数据交互时,就建立一个TCP连接,数据发送完成后,则断开此TCP连接,一般银行都使用短连接。
比如http的,只是连接、请求、关闭,过程时间较短,服务器若是一段时间内没有收到请求即可关闭连接。
其实长连接是相对于通常的短连接而说的,也就是长时间保持客户端与服务端的连接状态。
长连接与短连接的操作过程:
通常的短连接操作步骤是:
连接→数据传输→关闭连接;
而长连接通常就是:
连接→数据传输→保持连接(心跳)→数据传输→保持连接(心跳)→……→关闭连接;
这就要求长连接在没有数据通信时,定时发送数据包(心跳),以维持连接状态,短连接在没有数据传输时直接关闭就行了.
什么时候用长连接,短连接
长连接多用于操作频繁,点对点的通讯,而且连接数不能太多情况,。每个TCP连接都需要三步握手,这需要时间,如果每个操作都是先连接,再操作的话那么处 理速度会降低很多,所以每个操作完后都不断开,次处理时直接发送数据包就OK了,不用建立TCP连接。例如:数据库的连接用长连接, 如果用短连接频繁的通信会造成socket错误,而且频繁的socket 创建也是对资源的浪费。
发送接收方式
1、异步
报文发送和接收是分开的,相互独立的,互不影响。这种方式又分两种情况:
(1)异步双工:接收和发送在同一个程序中,由两个不同的子进程分别负责发送和接收
(2)异步单工:接收和发送是用两个不同的程序来完成。
2、同步
报文发送和接收是同步进行,既报文发送后等待接收返回报文。 同步方式一般需要考虑超时问题,即报文发出去后不能无限等待,需要设定超时时间,超过该时间发送方不再等待读返回报文,直接通知超时返回。
在长连接中一般是没有条件能够判断读写什么时候结束,所以必须要加长度报文头。读函数先是读取报文头的长度,再根据这个长度去读相应长度的报文。
单工、半双工和全双工
根据通信双方的分工和信号传输方向可将通信分为三种方式:单工、半双工与全双工。在计算机网络中主要采用双工方式,其中:局域网采用半双工方式,城域网和广域网采用全双年方式。
1. 单工(Simplex)方式:通信双方设备中发送器与接收器分工明确,只能在由发送器向接收器的单一固定方向上传送数据。采用单工通信的典型发送设备如早期计算机的读卡器,典型的接收设备如打印机。
2. 半双工(Half Duplex)方式:通信双方设备既是发送器,也是接收器,两台设备可以相互传送数据,但某一时刻则只能向一个方向传送数据。例如,步话机是半双工设备,因为在一个时刻只能有一方说话。
3. 全双工(Full Duplex)方式:通信双方设备既是发送器,也是接收器,两台设备可以同时在两个方向上传送数据。例如,电话是全双工设备,因为双方可同时说话。
而像WEB网站的http服务一般都用短链接,因为长连接对于服务端来说会耗费一定的资源,而像WEB网站这么频繁的成千上万甚至上亿客户端的连接用短连 接会更省一些资源,如果用长连接,而且同时有成千上万的用户,如果每个用户都占用一个连接的话,那可想而知吧。所以并发量大,但每个用户无需频繁操作情况 下需用短连好。
所以,长连接和短连接的选择要视情况而定。
长连接中心跳包及其作用:
一:内网机器如果不主动向外发起连接,外网机没法直连内网的,这也是内网机安全的原因之一吧,又因为路由器会把这个关系记录下来,但是过一段时间这个记 录可能会丢失 ,所有每一个客户端每隔一定时间就会向服务器发送消息,以保证服务器可以随时找到你,这东西被称为心跳包。
二:理论上说,这个连接是一直保持连接的,但是实际情况中,如果中间节点出现什么故障是难以知道的。更要命的是,有的节点(防火墙)会自动把一定时间之 内没有数据交互的连接给断掉。在这个时候,就需要我们的心跳包了,用于维持长连接,保活。在获知了断线之后,服务器逻辑可能需要做一些事情,比如断线后的 数据清理呀,重新连接呀……当然,这个自然是要由逻辑层根据需求去做了。总的来说,心跳包主要也就是用于长连接的保活和断线处理。一般的应用下,判定时间 在30-40秒比较不错。如果实在要求高,那就在6-9秒。
三:如果不主动关闭socket的话,系统不会自动关闭的,除非当前进程挂掉了,操作系统把占用的socket回收了才会关闭。为什么需要心跳连接主要 是判断当前连接是否是有效的、可被使用的。在实际应用中假设一段时间没有数据传输时候理论上说应该连接是没有问题的,但是网络复杂,中途出现问题也是常见 的,网线被掐断了、对方进程挂掉了、频繁丢包等,这时候TCP连接是不可使用的,但是对于应用层并不知道,如果需知道网络情况则要很复杂的超时进行了 解,TCP从底层就实现了这样的功能。心跳机制是TCP在一段时间间隔后发送确定连接端是否还存在,如果存在的话就会回传一个包确定网络有效,如果心跳包 有问题,则通知上层应用当前网络有问题了。
这取决于你的server端的超时配置, 每个socket连接都是长连接,它是一个相当占用系统资源的通信管道, 如果这个长连接什么事也没干硬是要占着资源,则server端可以选择关闭这个连接,以省下资源让更多的用户连接进来。
所以,即便客户端的是采用死循环while(true)方式连到服务端,对于特定的客户端和服务端类型来说也需要一定时间间隔的心跳(告诉服务端,我还活着,虽然我没干活也没说话,但别把我关了)。
相关推荐
Socket连接分为两种类型:长连接和短连接。这两种连接方式各有特点,适用于不同的应用场景。 **1. 短连接(Short Connection)** 短连接通常用于一次性、非持久性的通信,如HTTP协议就是典型的短连接。在短连接中...
标题“c# Socket长连接 短链接 自己封装 通讯”揭示了我们将讨论的主题:如何使用C#实现Socket的长连接和短连接,并自定义通信协议。这里的关键点包括: 1. **Socket基础**:Socket是网络通信中的一个抽象概念,它...
"短连接"和"长连接"是Socket连接的两种不同模式,它们在处理网络请求时有着显著的区别。 短连接(Short Connection)通常用于一次性或者较少交互的服务,如HTTP协议就是基于短连接的。在短连接中,每次通信完成后,...
在TCP/IP协议族中,Socket分为两种类型:短连接(Short-lived Connection)和长连接(Long-lived Connection)。短连接通常用于一次性传输数据,如HTTP请求;而长连接则适合于保持连接状态,以便进行多次数据交互,...
编写网络程序时需要正确区分长、短连接,以便选择合适的连接模式。 对长连接的维护 长连接需要维护,包括检测对方的主动断连和宕机、异常退出及网络不通。可以使用“心跳”机制来检测对方的状态,并在检测到对方断...
相较于短连接,长连接减少了连接建立和关闭的开销,提高了通信效率。 在Java中,我们通常通过`java.net.Socket`和`java.net.ServerSocket`类来实现Socket编程。以下是一些关键知识点: 1. **创建ServerSocket**:...
相比于短连接,长连接减少了连接建立和断开的开销,适用于需要频繁交互的应用场景,如即时通讯、在线游戏、推送服务等。 一、服务端Socket设置 1. 创建ServerSocket实例,指定监听的端口号。 2. 使用ServerSocket的...
2. **长连接**:与传统的Socket短连接不同,长连接保持在客户端和服务器之间长时间打开,避免了频繁的连接和断开,适用于需要持续交互的应用,如实时推送服务。 3. **MINA API**:MINA提供了一系列接口,如`...
TCP长连接与心跳机制是确保可靠连接的关键技术,特别是对于那些需要持续通信的服务,如在线游戏、实时聊天、数据同步等。本篇文章将深入探讨TCP长连接Socket以及心跳收发消息的原理和实现方法。 首先,TCP是一种...
同时,心跳线程的生命周期需要与Socket连接同步,确保在连接关闭时停止心跳。 6. **资源释放**:当Socket不再使用时,记得关闭它以释放系统资源。在安卓环境中,特别需要注意内存管理和资源的及时回收。 7. **...
在“socket连接.zip”压缩包中,我们主要关注的是Java实现的socket长连接和短连接服务端代码,以及它们如何处理XML和JSON等不同类型的数据。 首先,让我们了解一下Socket的基本概念。Socket是网络上的进程间通信...
在IT行业中,性能测试是评估系统能力的关键环节,特别是对于网络通信来说,长连接和短连接的选择直接影响到系统的效率和资源消耗。本文将基于提供的文件内容,深入探讨TCP长连接和短连接的区别以及它们在性能测试中...
TCP连接分为长连接和短连接,这两种连接方式各有其特点和适用场景。本Demo是用C++语言在VS2017环境下编写的,旨在帮助开发者理解TCP长连接和短连接的实现。 首先,我们要理解TCP连接的基本概念。TCP是一种面向连接...
TCP 长连接与短连接是网络通信中的两种不同连接方式,主要区别在于连接的持续时间和资源利用率。短连接通常是一次性操作后立即断开,适用于不频繁的交互,如HTTP请求;而长连接则在多次操作间保持连接,常用于需要...
首先研究下长连接和短连接的性能区别。curl内部是通过socket去连接通讯。socket每次连接最为耗时,如果能够复用连接,长时间连接,减少每次socket连接的时间,则可以大大减少时间,提高效率。 (2) 多线程。单个...
而短连接则是每次交互完成后即关闭连接,常见于Web服务器与客户端的交互,因为频繁的新开和关闭连接可以节省系统资源,但同时也增加了建立连接的时间成本。 在性能测试中,选择长连接还是短连接取决于业务需求。...
在深入探讨Socket连接池之前,我们需要了解两种基本的Socket连接方式:长链接和短链接。 ##### 2.1 长链接(Long Connection) 长链接是指当数据发送完成后,Socket连接并不会立即断开,而是保持连接状态直到发生...
TCP长连接和短连接在性能测试中的差异主要体现在网络资源的使用、响应时间和系统负载上。本次测试通过LoadRunner工具的Java脚本进行模拟,对比了两种连接方式在并发线程数、每秒事务处理量(TPS)以及服务器资源消耗...
4. **保持长连接**:为了实现长连接,通常需要在一个后台线程(如AsyncTask或IntentService)中维护Socket连接,避免因主线程阻塞导致应用无响应。 二、Linux后台的Socket服务端实现 1. **监听Socket**:在Linux...