面试官:说说 WebSocket 和 Socket 及 Http 的区别?
阅读本文大概需要 4.5 分钟。
来自:juejin.cn/post/6942358900171603975
Socket是什么?
-
TPC/IP协议是传输层协议,主要解决数据如何在网络中传输; -
Socket是对TCP/IP协议的封装和应用(程序员层面上); -
而HTTP是应用层协议,主要解决如何包装数据。
WebSocket属于WHATWG发布的Web Application的一部分(即HTML5)的产物。大约在08年的时候,WG的工程师在讨论网络环境中需要一种全双工的连接形式,刚开始一直叫做「TCPConnection」,并讨论了这种协议需要支持的功能,大致已经和我们今天看到的WebSocket差不多了。他们认为基于现有的HTTP之上的一些技术(如长轮询、Comet)并满足不了这种需求,有必要定义一个全新的协议。
WebSocket和Socket的区别?
为什么要使用Websocket?
persistent connection
),在一个TCP连接上也可以传输多个
Request/Response
消息对,但是HTTP的基本模型还是一个Request对应一个Response。
-
轮询(polling),轮询就会造成对网络和通信双方的资源的浪费,且非实时。 -
长轮询,客户端发送一个超时时间很长的Request,服务器hold住这个连接,在有新数据到达时返回Response,相比#1,占用的网络带宽少了,其他类似。 -
长连接,其实有些人对长连接的概念是模糊不清的,我这里讲的其实是HTTP的长连接(1)。如果你使用Socket来建立TCP的长连接(2),那么,这个长连接(2)跟我们这里要讨论的WebSocket是一样的,实际上TCP长连接就是WebSocket的基础,但是如果是HTTP的长连接,本质上还是Request/Response消息对,仍然会造成资源的浪费、实时性不强等问题。
Websocket协议内容
握手
Upgrade扩展:Upgrade是HTTP中用来进行协议升级的头域,在扩展的协议内容中,客户端发起的协议转换的方式更多,同时服务器也可以选择不接受客户端的协议升级请求;服务端也可以发起协议升级。
ws-URI = "ws:" "//" host [ ":" port ] path [ "?" query ]
wss-URI = "wss:" "//" host [ ":" port ] path [ "?" query ]
host = <host, defined in [RFC3986], Section 3.2.2>
port = <port, defined in [RFC3986], Section 3.2.3>
path = <path-abempty, defined in [RFC3986], Section 3.3>
query = <query, defined in [RFC3986], Section 3.4>
数据传输
WebSocket和HTTP的对比
相同点
-
都是基于TCP的应用层协议。 -
都使用Request/Response模型进行连接的建立。 -
在连接的建立过程中对错误的处理方式相同,在这个阶段WS可能返回和HTTP相同的返回码。 -
都可以在网络中传输数据。
不同点
-
WS使用HTTP来建立连接,但是定义了一系列新的header域,这些域在HTTP中并不会使用。 -
WS的连接不能通过中间人来转发,它必须是一个直接连接。 -
WS连接建立之后,通信双方都可以在任何时刻向另一方发送数据。 -
WS连接建立之后,数据的传输使用帧来传递,不再需要Request消息。 -
WS的数据帧有序。
推荐阅读:
内容包含Java基础、JavaWeb、MySQL性能优化、JVM、锁、百万并发、消息队列、高性能缓存、反射、Spring全家桶原理、微服务、Zookeeper......等技术栈!
⬇戳阅读原文领取! 朕已阅