HTTP vs Socket


1、Socket

套接字Socket=(IP地址:端口号)

通过互联网通信,至少需要一对套接字,其中一个运行于客户端,我们称之为 Client Socket,另一个运行于服务器端,我们称之为 Server Socket

套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议栈进行交互的接口

Socket是应用层与传输层之间的同一个抽象层,它是一套接口,所以Socket连接可以基于TCP连接,也有可能基于UDP。我们知道,TCP协议是可靠的,UDP协议是不可靠的,那么基于TCP协议的Socket连接同样是可靠的;基于UDP协议的Socket连接是不可靠的,大多数的即时通讯工具都是基于后者实现的。

2、区分HTTP、Socket、TCP/UDP

HTTP是应用层的协议,也是开发中最常用的一个网络协议;
TCP是传输层的协议,大学学过计算机网络的都知道,该层还有一个UDP协议;
而Socket是从传输层上抽象出来的,采用IP地址加端口号的形式来标识,并不是传统意义上的网络协议。

HTTP、Socket、TCP/UDP,三者在TCP/IP协议族中的位置关系:

3、HTTP vs Socket

http只是个超文本协议,socket只是读写io,
客户端请求服务端遵循http超文本协议,实际上这个请求实现方式是用socket通信完成的。
协议就好比接口对接时,我要什么token,做什么加密,数据结构要怎样,别混了!

用HTTP Or Socket?
用HTTP:双方不需要时刻保持连接在线,比如客户端资源的获取(通过get/post请求获取网页、图片、JSON或者XML数据)、文件上传、小文件下载等。
用Socket:大部分即时通讯应用(QQ、微信)、聊天室(基于UDP+消息广播的方式)、苹果APNs、大文件传输等。

  • (知乎上说QQ有部分功能是基于TCP,因为TCP每次都需要三次握手,虽然可靠但是网络不好的时候就惨了)

参考:
https://www.jianshu.com/p/a5410f895d6b
https://blog.csdn.net/min996358312/article/details/68969519