设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 技术文摘 查看内容

漫谈polling和Websocket

2014-6-30 11:40| 发布者: joejoe0332| 查看: 4170| 评论: 0|原作者: @whthomas93|来自: whthomas的博客

摘要: Http被设计成了一个单向的通信的协议,即客户端发起一个request,然后服务器回应一个response。这让服务器很为恼火:我特么才是老大,我居然不能给小弟发消息。。。 ...


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)  


酷毙

雷人

鲜花

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部