`
mr_wangjq
  • 浏览: 40816 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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网站这么频繁的成千上万甚至上亿客户端的连接用短连接会更省一些资源,如果用长连接,而且同时有成千上万的用户,如果每个用户都占用一个连接的话,那可想而知吧。所以并发量大,但每个用户无需频繁操作情况下需用短连好。

 

 


总之,长连接和短连接的选择要视情况而定

分享到:
评论

相关推荐

    Java实现Socket长连接和短连接

    Socket连接分为两种类型:长连接和短连接。这两种连接方式各有特点,适用于不同的应用场景。 **1. 短连接(Short Connection)** 短连接通常用于一次性、非持久性的通信,如HTTP协议就是典型的短连接。在短连接中...

    Socket长连接+心跳包+发送读取

    Socket长连接是网络编程中的重要概念,主要用于保持客户端与服务器之间的持续通信状态,避免每次通信都需要重新建立连接的开销。在长连接中,一旦连接建立成功,就会保持该连接,直到某一方主动断开或者因为网络问题...

    c# Socket长连接 短链接 自己封装 通讯

    2. **长连接与短连接**:在TCP/IP协议中,连接有两种模式。短连接通常用于一次性传输数据,如HTTP请求,连接建立后立即传输数据并关闭。而长连接则保持一段时间的开放状态,允许多次数据交换,如FTP或HTTPS。在C#中...

    Android的socket长连接(心跳检测)

    - 这个文件可能是一个服务(Service),负责接收和处理来自客户端的Socket连接和心跳包。 - 服务启动后,监听指定端口,当有新的Socket连接请求时,创建线程处理客户端的输入输出流,同时处理心跳检测。 6. **...

    Android-Socket长连接通信心跳包消息回调Java服务端

    通过分析和学习这个项目,你可以更直观地了解上述知识点的实现方式,包括如何创建Socket连接、实现心跳包、处理消息回调以及服务端的多线程处理等。 总结,实现“Android-Socket长连接通信心跳包消息回调Java服务端...

    Socket长连接心跳

    Socket长连接心跳是网络通信中保持连接活性的重要技术,尤其在移动端如安卓应用中更为常见。Socket,全称是“套接字”,是网络编程的基本接口,它允许应用程序通过网络发送和接收数据。心跳机制则是确保连接持续有效...

    TCP长连接Socket心跳收发消息

    TCP长连接与心跳机制是确保可靠连接的关键技术,特别是对于那些需要持续通信的服务,如在线游戏、实时聊天、数据同步等。本篇文章将深入探讨TCP长连接Socket以及心跳收发消息的原理和实现方法。 首先,TCP是一种...

    Socket长连接demo

    在TCP/IP协议族中,Socket分为两种类型:短连接(Short-lived Connection)和长连接(Long-lived Connection)。短连接通常用于一次性传输数据,如HTTP请求;而长连接则适合于保持连接状态,以便进行多次数据交互,...

    Socket心跳连接_java

    在TCP(传输控制协议)长连接中,心跳连接是一种维持连接活性的重要机制,尤其是在服务器与客户端长时间无数据交换的情况下。本篇文章将深入探讨Java中的Socket心跳连接以及其在TCP长连接中的应用。 首先,TCP是一...

    socket 长连接 多线程 心跳包 包头包体

    socket 长连接 简单例子,适合初学的朋友,里面有多线程 实现的,包括心跳包,数据分为两部分传送,首先双方约定用一个4字节的数组告诉对方要传送数据的长度,然后在写入数据,这样长连接的时候,双方可以知道对方...

    C# socket异步长连接

    在C#中,System.Net.Sockets命名空间提供了Socket类,用于创建和管理socket连接。 在“异步”方面,C#的Socket支持异步操作模式,这意味着你可以启动一个网络操作(如连接、接收或发送数据),然后继续执行其他任务...

    Socket长连接异常处理

    "Socket长连接异常处理" 在 Java 网络编程中,Socket 长连接是指在客户端和服务器端之间保持一个长期的连接,以便于数据的传输和通信。然而,在这种长连接中,可能会出现各种异常情况,影响到数据的传输和通信。...

    java socket 长连接实例

    1. **Socket的创建**:服务器端需要使用`ServerSocket`类创建一个监听特定端口的服务器,客户端则使用`Socket`类与服务器建立连接。 2. **I/O流**:一旦连接建立,双方都可以通过Socket获取输入流和输出流,用于数据...

    socket长连接demo

    "Socket长连接demo"是一个实际工作场景中常见的需求,尤其是在需要持续数据交互的应用中,如实时监控、在线游戏或者服务器与客户端之间的即时消息传递。本示例主要探讨如何在Java中建立并维护一个长连接。 首先,...

    socket 长连接实例

    - **关闭连接**:通信完成后,使用`close()`函数关闭Socket连接。 3. **长连接的维护**: - 在长连接中,服务器和客户端不会在每次数据交换后立即关闭连接,而是会维持一段时间的空闲状态,等待下一次数据传输。 ...

    android客户端加服务端的socket长连接

    4. 长连接需要保持Socket连接状态,通常会设置心跳机制,定期发送心跳包以检查连接是否正常。 三、客户端对服务器发送消息 1. 客户端通过Socket的OutputStream将要发送的消息编码成字节流,然后写入到输出流。 2. ...

    进程间负载,基于socket长连接

    6. **安全与可靠性**:使用socket长连接需要考虑安全问题,如加密通信(SSL/TLS)、认证机制、防止中间人攻击等。同时,要确保系统的容错性和高可用性,例如通过备份连接、故障转移和恢复策略。 7. **监控与调试**...

    socket长连接

    "socket长连接"是指在客户端和服务端之间建立的一种持久性的连接,它允许双方在连接保持打开状态下进行多次数据交换,而不必每次通信都进行连接的建立和断开。这种模式在需要频繁交互或实时性要求较高的场景中尤为...

    socket长连接 demo

    `Client.java`文件通常包含客户端的Socket连接代码。客户端在建立连接后,会周期性地调用`KeepAlive.java`中的心跳对象方法,发送心跳包到服务器。心跳包可以是一个简单的字符串或者自定义的协议格式,用于表明...

    Android-MinaSocket一款基于Mina的Socket长连接库

    - **心跳机制**:为了检测连接是否断开,通常需要设置心跳包,定时发送和接收,防止连接因长时间无数据传输而被网络中间设备关闭。 - **线程安全**:在多线程环境下,需确保所有操作都是线程安全的,避免并发问题。...

Global site tag (gtag.js) - Google Analytics