是什么?
WebSocket协议RFC 6455提供了一种标准化方法,可以通过单个TCP连接在客户端和服务器之间建立全双工双向通信通道。它是与HTTP不同的TCP协议,但旨在通过端口80和443在HTTP上工作,并允许重复使用现有的防火墙规则。
WebSocket交互始于一个HTTP请求,该请求使用HTTP Upgrade标头进行升级,或者在这种情况下切换到WebSocket协议。以下示例显示了这种交互:
GET /spring-websocket-portfolio/portfolio HTTP/1.1
Host: localhost:8080
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: Uc9l9TMkWGbHFD2qnFHltg==
Sec-WebSocket-Protocol: v10.stomp, v11.stomp
Sec-WebSocket-Version: 13
Origin: http://localhost:8080
HTTP与WebSocket
WebSocket是一种低级传输协议,与HTTP不同,它不对消息的内容规定任何语义。这意味着除非客户端和服务器的消息语义达成一致,否则就无法路由或处理消息。
WebSocket客户端和服务器可以通过Sec-WebSocket-Protocol,HTTP握手请求上的标头协商使用更高级别的消息传递协议(例如STOMP)。在这种情况下,他们需要提出自己的约定。
何时用?
很多情况下,结合使用Ajax和HTTP流或长时间轮询可以提供一种简单有效的解决方案。
WebSockets可以使网页具有动态性和交互性。
新闻,邮件和社交订阅源需要动态更新,每隔几分钟这样做是完全可以的。
另一方面,协作,游戏和金融应用程序需要更接近实时
将WebSocket用于防火墙内部的应用程序是一个更直接的决定。
部署方法
Java WebSocket API(JSR-356)提供了两种部署机制。
第一个涉及启动时的Servlet容器类路径扫描(Servlet 3功能)。
另一个是在Servlet容器初始化时使用的注册API。
但是这两种机制都无法将单个“前端控制器”用于所有HTTP处理(包括WebSocket握手和所有其他HTTP请求)