要弄明白 http 和 socket 首先要熟悉网络七层:物 数 网 传 会 表 应,如图1html
如图1web
HTTP 协议:超文本传输协议,对应于应用层,用于如何封装数据.服务器
TCP/UDP 协议:传输控制协议,对应于传输层,主要解决数据在网络中的传输。网络
IP 协议:对应于网络层,一样解决数据在网络中的传输。socket
传输数据的时候只使用 TCP/IP 协议(传输层),若是没有应用层来识别数据内容,传输后的协议都是无用的。post
应用层协议不少 FTP,HTTP,TELNET等,能够本身定义应用层协议。ui
web 使用 HTTP 做传输层协议,以封装 HTTP 文本信息,而后使用 TCP/IP 作传输层协议,将数据发送到网络上。线程
1、HTTP 协议
http 为短链接:客户端发送请求都须要服务器端回送响应.请求结束后,主动释放连接,所以为短链接。一般的作法是,不须要任何数据,也要保持每隔一段时间向服务器发送"保持链接"的请求。这样能够保证客户端在服务器端是"上线"状态。server
HTTP链接使用的是"请求-响应"方式,不只在请求时创建链接,并且客户端向服务器端请求后,服务器才返回数据。htm
2、Socket 链接
要想明白 Socket,必需要理解 TCP 链接。
TCP 三次握手:握手过程当中并不传输数据,在握手后服务器与客户端才开始传输数据,理想状态下,TCP 链接一旦创建,在通信双方中的任何一方主动断开链接以前 TCP 链接会一直保持下去。
Socket 是对 TCP/IP 协议的封装,Socket 只是个接口不是协议,经过 Socket 咱们才能使用 TCP/IP 协议,除了 TCP,也可使用 UDP 协议来传递数据。
建立 Socket 链接的时候,能够指定传输层协议,能够是 TCP 或者 UDP,当用 TCP 链接,该Socket就是个TCP链接,反之。
Socket 原理
Socket 链接,至少须要一对套接字,分为 clientSocket,serverSocket 链接分为3个步骤:
(1) 服务器监听:服务器并不定位具体客户端的套接字,而是时刻处于监听状态;
(2) 客户端请求:客户端的套接字要描述它要链接的服务器的套接字,提供地址和端口号,而后向服务器套接字提出链接请求;
(3) 链接确认:当服务器套接字收到客户端套接字发来的请求后,就响应客户端套接字的请求,并创建一个新的线程,把服务器端的套接字的描述发给客户端。一旦客户端确认了此描述,就正式创建链接。而服务器套接字继续处于监听状态,继续接收其余客户端套接字的链接请求.
Socket为长链接:一般状况下Socket 链接就是 TCP 链接,所以 Socket 链接一旦创建,通信双方开始互发数据内容,直到双方断开链接。在实际应用中,因为网络节点过多,在传输过程当中,会被节点断开链接,所以要经过轮询高速网络,该节点处于活跃状态。
不少状况下,都是须要服务器端向客户端主动推送数据,保持客户端与服务端的实时同步。
若双方是 Socket 链接,能够由服务器直接向客户端发送数据。
若双方是 HTTP 链接,则服务器须要等客户端发送请求后,才能将数据回传给客户端。
所以,客户端定时向服务器端发送请求,不只能够保持在线,同时也询问服务器是否有新数据,若是有就将数据传给客户端。
参考原文:http://www.cnblogs.com/xclidongbo/p/4032904.html?utm_source=tuicool&utm_medium=referral