《通信协议》——Socket(5.1)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hy_coming/article/details/88758342

一、前言

前面我们已经了解通信协议OSI模型的七层原理,也学习了TCP/IP协议的原理,HTTP协议的原理,在我们正常的一个浏览器的请求都是基于HTTP协议,也就是一个http请求。但是http请求是一个短连接,每一次服务端回复完之后就会断开,那么现在有这样的一种需求就是需要保证数据的实时性并保证双方都能主动发起,比如说聊天工具,或者是其他的是对时效性要求比较高的情形,也就是我们可能需要一个长连接来解决这个事,从理论上上来说在没有人为断开的情况下两个端口之间的连接是不断的,比如我们的QQ通讯,当我们与好友通讯的时候,在非外界因素的情况下,我们的之间的连接是一直存在的,基于这样的一种情况,我们可以使用Socket通信技术。

Socket的英文原义是“孔”或“插座”。作为BSD UNIX的进程通信机制,取后一种意思。通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。Socket正如其英文原义那样,像一个多孔插座。一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供220伏交流电, 有的提供110伏交流电,有的则提供有线电视节目。 客户软件将插头插到不同编号的插座,就可以得到不同的服务。网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。(摘自百度百科)

二、HTTP和Socket

上面基本上已经了解了Socket的定义,下面来看看他们之间的区别:

HTTP与Socket区别
描述 HTTP连接 Socket连接
协议 HTTP协议 TCP/IP协议
连接类型 短连接,客户端主动发起请求,服务端收到请求并回复,断开连接,更新数据不能反向推送。  

长连接,理论上客户端和服务器端一旦建立起连接将不会主动断掉;但是由于各种环境因素可能会是连接断开,比如说:服务器端或客户端主机down了,网络故障,或者两者之间长时间没有数据传输,网络防火墙可能会断开该连接以释放网络资源。所以当一个socket连接中没有数据的传输,那么为了维持连接需要发送心跳消息,具体心跳消息格式是开发者自己定义的。

数据量
传输时间
传输效率
安全性 低(但是现在基于HTTPS,安全性应该没有问题) 高,可以加密传输
技能要求(开发人员)
适用场景 适用与应用级接口实现,只需要调用,而不需要数据的实时交互,如:公司OA服务、互联网服务 适合C/S之间信息实时交互,如:即时聊天、网络游戏,银行交互,支付

三、真实案例

HTTP连接:在开发的项目中,由于流程的需要,会调用到各个公司开发的接口,保证整体数据的一致性,由于我们的连接不需要进行数据的实时交互,只需要在特定的情况下调用数据,所以可以采用HTTP连接。

Socket连接:以前做过一个项目,主要是不同平台之间的数据交互,其实当时对时效性要求不是很高,但是有一点就是连接不能断开,或者说特定一段时间内不能断开,因为我们随时都会有人去操作数据进行交互,基于这样的一种需求我们的解决就是使用Socket连接来保证保证数据同步。

四、总结

以前有自己从网上参考的资料,也有的是自己的理解,不正确指出,烦请指出交流,下面一片的内容Socket编程实际运用

参考资料:https://www.2cto.com/kf/201802/724498.html

猜你喜欢

转载自blog.csdn.net/hy_coming/article/details/88758342