作为java的初学者,看了网上的资料后,关于java的长短连接,感觉理解的不是很深刻,结合自己的学习和网上的资料整理如下,不正确之处请大家批评指正。
其实作为java语言本身而言,能够提供给我们使用的最终的网络接口实际也就是java的Socket API,除此外别无他物。 所以我们经常提到的HTTP和Netty 长短连接实际都是针对的java Socket而言的,大家都学过网络的7层模型,但是在JAVA中7层模型显的过于的复杂,大多数的层,我们无法直接感知。实际简化为如下的图是较为准确的:
HTTP的长短连接:
何为HTTP长连接,准确的说HTTP是无状态的连接,每一次请求完毕后,实际客户端和服务器端在应用层是没有任何连接的,也就是所谓的每一次请求建立一次连接,无状态的,但是为什么还有HTTP长连接之说呢?那是因为HTTP作为应用层的协议其实际依赖的是底层的TCP协议,TCP协议大家都非常的熟悉也就是三次握手的可靠连接,可以多次可靠的传递IP数据包。所以在HTTP的协议中,有一个属性是:Connection:keep-alive,设置了该属性则是浏览器告诉服务器请使用HTTP长连接方式,实际也就是TCP长连接,也就是浏览器实际和服务器之间在完成一次HTTP请求后并没有真正的关闭底层Socket连接,下一次的请求还是继续的使用这个连接。
以Tomcat为例子,实际Tomcat 在HTPP长连接方式下,当一个新的HTTP请求来临则打开一个Socket处理请求完毕后,TOMCAT并没有立即调用java 关闭Socket的方法关闭连接,而是维持了这个连接,当然此时如果浏览器关闭了,那这个TCP链路也就关闭了(关于如何维持一个TCP连接不中断,这个超出的本文的讨论范围,只需要记住只要没有显式去关闭已创建的Socket连接,则保持着TCP的连接)。大家知道网络资源也是很珍贵的,所以Tomcat不能一直维持着这个连接,当上次请求时间大于用户设置的Session 有效时间到来时,则会主动关闭这个连接,这个时间是可以设置的。当然也可以不设置这个字段,那实际就是告诉服务器,请每次创建连接,一次请求后则直接关闭,这种情况是相当的耗费资源的,实际也就是HTTP的短连接。Tomcat等都是默认的TCP长连接。
JAVA NIO的长短连接:
JAVA的NIO 大家都非常的熟悉了,基于NIO的netty等传输协议也是非常的多,这些框架都号称实现了长连接,实际其依赖的网络底层依旧是java的Socket 接口。其实也就是在传输的过程中,java的Socket并没有随着数据传输的完成而关闭,而是一直维持着这个TCP的连接,等下次使用依旧使用这个连接(同上,关于如何维持TCP的长连接超出的本文的讨论范围)。而以netty为例子,是支持用户指定初始化方式的,即类似于HTTP,可以设置是使用长连接还是短连接。
附:
关于底层是如何维持TCP长连接的,可以参考《TCP/IP详解》一书,有详细的介绍。总之就是服务器和客户端之间建立一个探测心跳,不断的侦断对方是否依旧存在,如果没有收到对方的反馈信息,可以认为对方的连接已经断了,那么服务器会考虑关闭TCP连接,如果对方在一定的时间又发送了侦断信息,则认为又连接上了。
总之,通过TCP的长连接,维持了一个对应用层透明的链路,应用层可以反复的使用这个链路传输数据,而保存高效,避免了三次握手建立连接和四次握手关闭连接所带来的资源浪费和资源消耗。
相关推荐
6. **安全性和稳定性**:使用华为的Java API,开发者可以确保与短信网关的通信安全可靠,因为API已经考虑了网络异常、数据包重传等问题,具备一定的错误处理机制。 7. **性能优化**:CMPP3.0 API在设计时考虑了性能...
在Java中,这些操作可以通过建立TCP连接并解析和构造特定的协议报文来完成。 1. **注册与登录**:在开始发送短信之前,客户端需要向服务器进行注册,并通过登录过程验证身份。这涉及到发送特定格式的报文,包含系统...
综上所述,"长短链接实现.zip"项目通过Java的Socket编程展示了如何在服务器端(SocketServer)和客户端(SocketClient)之间建立和管理TCP连接,以此模拟HTTP协议中的短链接和长链接行为。通过学习和理解这个示例,...
1. **神经网络基础**:OCR程序通常会使用深度学习的卷积神经网络(CNNs)或循环神经网络(RNNs),尤其是LSTM(长短时记忆网络)来处理序列数据。CNNs擅长于图像处理,能够检测并提取图像特征,而RNNs则适合处理序列...
Java版本的CMPP(China Mobile Packet Protocol)是一个用于与中国移动通信网络进行交互的协议,主要用于短信服务,包括发送、接收短信以及获取网关报告和状态报告。在这个名为"Java版本CMPP移动收发短信,网关报告...
6. **长短时记忆网络(LSTM)**:解决了RNN的梯度消失问题,更有效地处理长序列信息。 **Java实现神经网络的关键点** 1. **数据预处理**:对输入数据进行标准化或归一化,使其符合神经网络的输入要求。 2. **权重...
**SMGP 3.0 Java源代码详解** SMGP(Short Message Gateway Protocol)是一种用于短消息服务(SMS)的通信协议,广泛应用于移动通信网络中。SMGP 3.0是该协议的一个版本,提供了更高级的功能和优化,主要用于运营商...
在短信平台中,Java用于编写服务器端的业务逻辑,处理请求、响应、连接管理以及异常处理等。 3. **短信服务流程** - **发送**:用户通过客户端或者API接口发送短信请求,这些请求会被Java程序接收到并解析。 - **...
Java实现CMPP协议开发代码主要涉及的是中国移动通信的CMPP(China Mobile Packet ...通过以上分析,Java实现CMPP协议的开发涉及到网络通信、协议解析、HTTP服务、数据处理等多个技术领域,是一个综合性的系统开发项目。
然而,对于高精度的文字识别,通常会采用深度学习方法,如卷积神经网络(Convolutional Neural Networks, CNN)或者循环神经网络(Recurrent Neural Networks, RNN),特别是结合长短时记忆(LSTM)的模型,这些模型...
- **长短信分割**:当消息超过单条限制时,需要进行分段并添加Udh(User Data Header)来指示短信片段。 5. **高级特性** - **上行消息**:处理用户通过手机发送到应用的短信。 - **状态报告**:跟踪消息发送...
Java作为一种广泛使用的编程语言,提供了丰富的库和工具来处理网络通信和协议实现。在这个“smgp协议java实现包”中,开发者已经封装了SMGP协议的相关功能,使得Java开发者能够轻松地集成短信服务。这个实现可能包含...
6. **流量控制**:CMPP3.0具有流量控制机制,允许MC根据网络状况对SP的发送速率进行控制,避免网络拥塞。 7. **故障恢复**:如果TCP连接断开,SP需要重新建立连接并恢复未完成的事务。 8. **安全机制**:CMPP3.0...
7. **JAVA实现**:在JAVA中实现CMPP协议,通常需要创建一个TCP客户端,负责建立和维护与网关的连接。然后,根据CMPP协议的报文格式定义,封装和解析数据包。可以使用JAVA的Socket编程和多线程技术来实现并发的请求...
1. **Utils**:这个目录下的代码通常包含一些通用工具类,如数据编码解码、日期时间处理、网络连接管理等。这些工具类对于实现SMPP协议至关重要,因为它们提供了处理低级细节的功能,让核心业务逻辑更加清晰。 2. *...
6. **扩展性**:CMPP3.0增加了对GSM、CDMA等不同网络的支持,并提供了一些新的特性,如短消息上下文、长短信分段等,使得协议更加灵活和强大。 在提供的"remindMyCmpp3.0"源代码中,可能包含了以下关键组件和方法:...
通常,这涉及到使用`java.net.Socket`类创建网络连接,以及使用线程来定期发送心跳指令。 2. **SMPP绑定**:SMPP协议要求客户端首先进行“绑定”操作,以表明其身份和角色(如Transmitter、Receiver或Transceiver)...
1. **SMPP协议**:SMPP(Short Message Peer-to-Peer)是用于短消息传递的开放标准协议,Java SMS系统通过SMPP连接到短信网关,实现短信的收发。 2. **线程管理**:为了处理并发的短信发送请求,系统需要有效的线程...
神经网络是模仿人脑神经元结构的一种计算模型,由大量的人工神经元连接而成。每个神经元可以接收输入信号,经过一定的加权和非线性转换后产生输出。通过训练,网络参数(即权重)得以调整,从而使网络能够解决特定...
短信猫通常是一个USB设备,它连接到计算机并模拟一个串行端口,允许程序通过AT命令来操作手机的功能,如发送和接收短信、查询网络状态等。下面将详细解释Java短信猫的相关知识点。 1. **Java串口通信**: 在Java中...