简介
websocket是一种全新的协议,基于TCP。提供了一种B/S架构之间全双工的通信模式。主要解决HTTP协议只能由客户端发起请求的这种限制。WebSocket 协议在2008年诞生,2011年成为国际标准。所有浏览器都已经支持了。
在websocket协议出现之前,HTTP的这种限制,是通过ajax的轮询和comet技术来解决的,可以参见这里
特点
- 建立在 TCP 协议之上,服务器端的实现比较容易。
- 与 HTTP 协议有着良好的兼容性。默认端口也是80和443,并且握手阶段采用 HTTP 协议,因此握手时不容易屏蔽,能通过各种 HTTP 代理服务器。
- 数据格式比较轻量,性能开销小,通信高效。
- 可以发送文本,也可以发送二进制数据。
- 没有同源限制,客户端可以与任意服务器通信。
- 协议标识符是ws(如果加密,则为wss),服务器网址就是 URL,用法与HTTP协议类似,(使用HTTP的通用首部中的Connection和Upgrade字段将HTTP协议转换成使用websocket协议)。
语言支持
JavaEE 7中出了JSR-356:Java API for WebSocket规范。不少Web容器,如Tomcat,Nginx,Jetty等都支持WebSocket并实现了J2EE的定义。Tomcat从7.0.27开始支持 WebSocket,从7.0.47开始支持JSR-356。
demo可以参考这里,有JS客户端、tomcat的sdk包实现的客户端、以及一个开源项目(Java-Websocket)实现的客户端例子。
其他语言如C/C++/Python/JS等也都有相应支持