——我一直都提倡少用ajax轮询,有经验的都知道,ajax轮询的方式实现比较简单,但是比较浪费服务器的资源,服务器大多时间处理的是无用的请求。HTML5的一个新的协议websocket,实现了浏览器与服务器的全双工通信,可以很好地节省服务器资源。
我可以给你模拟ajax轮询请求消息的情景:[阴险][阴险]
客户端:啦啦啦,有没有新信息?[疑问]( Request)
服务端:没有。[微笑]( Response)
客户端:啦啦啦,有没有新信息?[疑问]( Request)
服务端:没有……[发呆]( Response)
客户端:啦啦啦,有没有新信息?[疑问]( Request)
服务端:你好烦啊,没有啊……[冷汗]( Response)
客户端:啦啦啦,有没有新消息?[疑问]( Reques)
服务端:好啦好啦,有了给你。[惊恐]( Response)
客户端:啦啦啦,有没有新消息?[疑问]( Request)
服务端:没……没……没有!我要吐血了~[发怒]
(Response) ——loop
Websocket,它解决了HTTP的这几个难题。首先一个,被动性,当服务器完成协议升级后(HTTP->Websocket),服务端就可以主动推送信息给客户端啦。所以上面的情景可以做如下修改。
客户端:啦啦啦,我要建立Websocket协议了,需要的服务:chat,Websocket协议版本:17(HTTP Request)[微笑]
服务端:好的,确认,已升级为Websocket协议(HTTP Protocols Switched)[微笑]
客户端:麻烦你有信息的时候推送给我噢! [微笑]
服务端:好的,有的时候会告诉你的。 [微笑]
服务端:大爷,你有新的消息。 [微笑]
服务端:大爷,又有一条新的消息。 [微笑]
……
就变成了这样,只需要经过一次HTTP请求,就可以做到源源不断的信息传送了。
ajax一般会应用在交互较多,频繁读取数据的web应用中。ajax的应用场景有表单数据验证,按需取数据,自动更新页面等等。
websocket的应用场景一般在社交应用,股票基金类应用的价格,基于位置的应用,在线教育等等。