WebSocket是H5提出的为了解决客户端和服务器双工通信的方法。在我们使用HTTP协议通信时,客户端主动向服务器发送请求,得到服务器端数据。为了与服务器端数据保持一致,之前常用的有轮询和长轮询两种方式。轮询是每隔一段时间周期性地向服务器请求数据,其中大部分是无用的请求,占用网络资源严重。而长轮询是发送一个请求,直到服务器返回更新的数据,才断开该连接。对于服务器端频繁更新的情况,长轮询的性能和轮询差不多。

WebSocket的有点在于,不用等客户端去请求,每当服务器有数据更新时,就会主动把数据发给客户端。它使用websocket协议,网络地址为ws://,而不是http://。既然是H5提出的技术,那么肯定存在兼容性问题。IE10以上支持。一个简单的检测浏览器支持不支持该技术的方式是 判断window.WebSocket=undefined与否。这里有一篇比较好的文章:http://blog.csdn.net/neco2011/article/details/52766082?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io。 这篇文章里介绍了浏览器自带的接口使用方法:

if (window.WebSocket){

var socket = new WebSocket("ws://localhost:6677"); //建立连接

socket.onopen = function(){} //连接建立事件

socket.close() //断开连接

socket.onclose = function(){}  //连接关闭事件

socket.send("xxxxx")  //发送消息

socket.onmessage = function(){}  //接收到消息的事件

}

socket.readyState =0,1,2,3分别对应了正在连接,连接成功,正在关闭和已经关闭四种状态。

WebSocket完全可以取代ajax。send是ajax的发送请求,onmessage就是接收到响应。

服务器端使用websocket还需要服务器的配合。node提供了ws和socket.io是比较常用的。这两个库其实都提供了服务器和客户端的方法。尤其是socket.io,对浏览器兼容性做了处理,对于不支持websocket的浏览器,能自动降级到ajax。

用了大约两天时间实现了一个简单的聊天室应用,就是使用了socket.io模块。最大的体会就是,websocket免去了前端发送周期性请求的麻烦,每当有更新时候,可以由后台主动发送更新数据(如,用户在哪个room和space等)。而且socket.io提供的命名空间和房间的概念很实用,可以方便的解决不同space或者room的用户聊天互不干扰的问题。最后附上项目地址,请多多指教。https://github.com/yinggeABC/ChatGroup

最新文章

  1. [LeetCode] Word Search II 词语搜索之二
  2. sh6.脚本磁盘分区格式化
  3. 当我我们用new操作符创建对象的时候,都发生了些什么?
  4. 堆排序Heap sort
  5. MongoDB学习笔记——集合管理
  6. 快速排序模板qsort(转载)
  7. PLSQL_数据泵导入导出数据Impdp/ Expdp(概念)
  8. JavaScript for...in 语句
  9. How to do Mathematics
  10. Picasso 加载图片到RelativeLayout之解决方案
  11. js的replace的用法;
  12. 一段代码让你秒懂java方法究竟是传值还是传地址
  13. hdu1286 寻找新朋友 (欧拉功能)
  14. 《JavaScript高级程序设计》读书笔记 ---变量
  15. sizeof 与 strlen
  16. openstack-ocata-身份验证2
  17. Discuz-阅读权限
  18. Linux系统安装(centos6.8)符破解码
  19. Android-Kotlin-空值处理&字符串比较&常量
  20. [BZOJ2738]矩阵乘法(整体二分+二维树状数组)

热门文章

  1. selenium查找动态的iframe的name
  2. peer not authenticated error
  3. 解决java文件编码和windows7系统(中文版)默认编码冲突所导致的乱码情况
  4. mac boot2docker certs not valid with 1.7
  5. 【SSM 8】spring集成Mybatis通用Mapper
  6. xampp 配置虚拟主机
  7. 解决UITableView上计时器(Timer)的滑动问题
  8. MySQL For Windows Zip解压版安装
  9. delpin常用函数
  10. matplotlib 显示中文 与 latex冲突