springboot中集成WebSocket

1.webSocket和http

WebSocket是HTML5出的东西(协议),也就是说HTTP协议没有变化,或者说没关系,但HTTP是不支持持久连接的(长连接,循环连接的不算)

首先HTTP有1.1和1.0之说,也就是所谓的keep-alive,把多个HTTP请求合并为一个,但是Websocket其实是一个新协议,跟HTTP协议基本没有关系,只是为了兼容现有浏览器的握手规范而已,也就是说它是HTTP协议上的一种补充可以通过这样一张图理解有交集,但是并不是全部。

2.webSocket是什么样的协议

Websocket是一个持久化的协议,相对于HTTP这种非持久的协议来说。

HTTP的生命周期通过Request来界定,也就是一个Request一个Response,那么在HTTP1.0中,这次HTTP请求就结束了。

在HTTP1.1中进行了改进,使得有一个keep-alive,也就是说,在一个HTTP连接中,可以发送多个Request,接收多个Response。但是请记住Request = Response, 在HTTP中永远是这样,也就是说一个request只能有一个response。而且这个response也是被动的,不能主动发起。

Websocket是基于HTTP协议的,或者说借用了HTTP的协议来完成一部分握手

GET /chat HTTP/1.1

Host: server.example.com

Upgrade: websocket     

Connection: Upgrade

Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==

Sec-WebSocket-Protocol: chat, superchat

Sec-WebSocket-Version: 13

Origin: http://example.com

比http协议的握手多了几行:

Upgrade: websocket

Connection: Upgrade

Apache、Nginx等服务器,发起的是Websocket协议

Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==

Sec-WebSocket-Protocol: chat, superchat

Sec-WebSocket-Version: 13

Sec-WebSocket-Key是一个Base64 encode的值,这个是浏览器随机生成的。告诉服务器:泥煤,不要忽悠窝,我要验证尼是不是真的是Websocket助理。

Sec_WebSocket-Protocol是一个用户定义的字符串,用来区分同URL下,不同的服务所需要的协议。简单理解:今晚我要服务A,别搞错啦~

Sec-WebSocket-Version是告诉服务器所使用的Websocket Draft(协议版本)

发布了296 篇原创文章 · 获赞 70 · 访问量 55万+

猜你喜欢

转载自blog.csdn.net/feicongcong/article/details/96871994
今日推荐