socket和Websocket

本文主要针对如下问题给出解答html

1.Socket 和 WebSocket 有哪些区别和联系?html5

2.WebSocket 和 HTML5 是什么关系?mysql

3.必须在浏览器中才能使用 WebSocket 吗?nginx

建议在看以前,先阅读此文 http://blog.csdn.net/lisaem/article/details/48489703。重点了解OSI七层模型的会话层。git

概述github

WebSocket 是为了知足基于 Web 的日益增加的实时通讯需求而产生的。在传统的 Web 中,要实现实时通讯,通用的方式是采用 HTTP 协议不断发送请求。但这种方式即浪费带宽(HTTP HEAD 是比较大的),又消耗服务器 CPU 占用(没有信息也要接受请求)。web

HTTP、WebSocket 等协议都是处于 OSI 模型的最高层: 应用层 。而 IP 协议工做在网络层(第3层),TCP 协议工做在传输层(第4层)。sql

对于 WebSocket 来讲,它必须依赖 HTTP 协议进行一次握手 ,握手成功后,数据就直接从 TCP 通道传输,与 HTTP 无关了。数据库

Socket是应用层与TCP/IP协议族通讯的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来讲,一组简单的接口就是所有,让Socket去组织数据,以符合指定的协议。而 WebSocket 则不一样,它是一个完整的 应用层协议,包含一套标准的 APIapache

 

WebSocket APIHTML5 标准的一部分, 但这并不表明 WebSocket 必定要用在 HTML 中,或者只能在基于浏览器的应用程序中使用。

实际上,许多语言、框架和服务器都提供了 WebSocket 支持,例如:

补充:

TCP/IP 
TCP/IP是个协议组,可分为三个层次:网络层、传输层和应用层。 
在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。 
在传输层中有TCP协议与UDP协议。 
在应用层有:TCP包括FTP、HTTP、TELNET、SMTP等协议 
                 UDP包括DNS、TFTP等协议 
短链接 
链接->传输数据->关闭链接 
HTTP是无状态的,浏览器和服务器每进行一次HTTP操做,就创建一次链接,但任务结束就中断链接。 
也能够这样说:短链接是指SOCKET链接后发送后接收完数据后立刻断开链接。 
  
长链接 
链接->传输数据->保持链接 -> 传输数据-> 。。。 ->关闭链接。 
长链接指创建SOCKET链接后无论是否使用都保持链接,但安全性较差。 
  
http的长链接 
HTTP也能够创建长链接的,使用Connection:keep-alive,HTTP 1.1默认进行持久链接。HTTP1.1和HTTP1.0相比较而言,最大的区别就是增长了持久链接支持(貌似最新的 http1.0 能够显示的指定 keep-alive),但仍是无状态的,或者说是不能够信任的。 
  
何时用长链接,短链接? 
 长链接多用于操做频繁,点对点的通信,并且链接数不能太多状况,。每一个TCP链接都须要三步握手,这须要时间,若是每一个操做都是先链接,再操做的话那么处理速度会下降不少,因此每一个操做完后都不断开,次处理时直接发送数据包就OK了,不用创建TCP链接。例如:数据库的链接用长链接, 若是用短链接频繁的通讯会形成socket错误,并且频繁的socket 建立也是对资源的浪费。 
  
而像WEB网站的http服务通常都用短连接,由于长链接对于服务端来讲会耗费必定的资源,而像WEB网站这么频繁的成千上万甚至上亿客户端的链接用短链接会更省一些资源,若是用长链接,并且同时有成千上万的用户,若是每一个用户都占用一个链接的话,那可想而知吧。因此并发量大,但每一个用户无需频繁操做状况下需用短连好。 
  
总之,长链接和短链接的选择要视状况而定。

相关文章
相关标签/搜索