WebSocket登场“跑来跑去真是麻烦诶~http肿么这么麻烦呀。咱们和老大之间整个新协议吧。” 这个想法在小弟们中炸开了锅!!! 在大家的千呼万唤中,WebSocket协议登场了。哈哈哈哈哈~让我来拯救各位吧~~~~ WebSocket协议是HTML5定义的一种新协议,它实现了浏览器与服务器全双工通信(full-duplex)。通过浏览器发出 websocket连线请求,然后服务器发出回应,建立一个联系的通道。小的们只用发个信息问老大:“首长好~”,老大回一个信儿:“同志们辛苦了!”这 样握手(handshaking)就完成了,websocket连线完成,通过websocket,我们可以完成真正的实时通信了。 websocket允许通过JavaScript建立与远程服务器的连接,从而实现客户端与服务器间双向的通信。在websocket中有两个方法: 1、send() 向远程服务器发送数据 2、close() 关闭该websocket链接 websocket同时还定义了几个监听函数 1、onopen 当网络连接建立时触发该事件 2、onerror 当网络发生错误时触发该事件 3、onclose 当websocket被关闭时触发该事件 4、onmessage 当websocket接收到服务器发来的消息的时触发的事件,也是通信中最重要的一个监听事件。 websocket还定义了一个readyState属性,这个属性可以返回websocket所处的状态: 1、CONNECTING(0) websocket正尝试与服务器建立连接 2、OPEN(1) websocket与服务器已经建立连接 3、CLOSING(2) websocket正在关闭与服务器的连接 4、CLOSED(3) websocket已经关闭了与服务器的连接 websocket的url开头是ws,如果需要ssl加密可以使用wss,当我们调用websocket的构造方法构建一个websocket对象(new WebSocket(url))的之后,就可以进行即时通信了。 哈哈哈哈哈哈~老大通过websocket发话了:晚上请吃饭! 小弟们赶紧行动起来~ 总结相比comet技术,websocket不仅节约了header的问题(websocket的head信息只有短短的2个字节)。更加重要的是是通 信的稳定性,comet在遇到网络问题之后,想要在不刷新页面的情况下恢复通信,非常困难,而websocket中提供了onclose函数来处理断开网 络后的情况,这为我们与服务器的通信提供了可靠的保障。在github上有一个js库(https://github.com/joewalnes /reconnecting-websocket)就是通过这种方式来处理websocket断网重连。 websocket看起来广泛实现只是时间问题了,当然这么好用的websocket也不是没有它的问题,websocket目前来看最大的问题是 浏览器的支持(幸好大部分的服务器软件在比较新的版本中都已经支持了websocket),ie直到10才开始支持这种协议,而且每个浏览器最近在升级浏 览器的时候,都会对websocket做出细微的调整。而且,想象你打开一个页面,当这个页面打开websocket连接并且执行一个内部IP地址的端口 扫描,如果端口扫描发现了内部网络上发现了一个开启的80端口,一个隧道就可能通过你的浏览器建立。这样做很可能最终绕过防火墙,并且允许访问内部内容。 所以安全问题,也是websocket现在面临的一大隐患。 原文出处: whthomas的博客(@whthomas93) |