WebSocket技术简介
低延迟双向交互
HTTP的请求/响应模式是客户端控制,需要用户互动或者定期轮询,以便从服务器加载新数据。以往为了实现数据从服务器立即推送到客户端,会采用所谓 推送
( Comet
) 技术:
长轮询: 打开一条连接以后保持,直到服务器推送来数据以后再关闭连接。服务器只要实际拥有新数据,就会发送响应。
iframe流: 在页面中插入一个隐藏的iframe,利用其src属性在服务器和客户端之间建立一条长链接,服务器向iframe传输数据(通常是HTML,内有负责插入信息的javascript),来实时更新页面。 iframe流方式的优点是浏览器兼容好,Google公司在一些产品中使用了iframe流,如Google Talk。
上述 推送
解决方案虽然非常好用,但是存在一个共同的问题:带有HTTP的开销,导致他们不能适用于低延迟应用。
WebSocket: 将套接字引入网络
WebSocket 规范定义了一种 API,可在网络浏览器和服务器之间建立“套接字”连接。简单地说:客户端和服务器之间存在持久的连接,而且双方都可以随时开始发送数据。
在HTML5标准中,定义了客户端和服务器通讯的WebSocket方式,在得到浏览器支持以后,WebSocket将会取代Comet成为服务器推送的方法,目前Google Chrome、Firefox、Opera、Safari等主流版本均支持,Internet Explorer从10开始支持。
使用场景:
多人在线游戏
聊天应用
体育赛况直播
即时更新社交信息流
WebSocket服务器端实现
目前,很多著名的WEB框架都支持WebSocket,可以按照自己项目使用的开发语言进行选择:
代理服务器
WebSocket 协议 ws://
和 wss://
使用 HTTP 升级系统(通常用于 HTTP/SSL)将 HTTP 连接“升级”为 WebSocket 连接。某些代理服务器不支持这种升级,并会断开连接。因此,即使指定的客户端使用了 WebSocket 协议,可能也无法建立连接。
Squid支持WebSocket配置 (需要Squid v5及以上版本)可以提供解决,此外, Nginx 很早就实现了WebSocket支持以及代理和负载均衡,可以做相应尝试。
参考
Introducing WebSockets: Bringing Sockets to the Web (网站有中文版,非常方便学习)