WebSocket

  • 释义:聊天室、服务、套接字、协议
  • 引用:https://www.ibm.com/developerworks/cn/web/1112_huangxa_websocket/index.html

    作为下一代的 Web 标准,HTML5 拥有许多引人注目的新特性,如 Canvas、本地存储、多媒体编程接口、WebSocket 等等。这其中有“Web 的 TCP ”之称的 WebSocket 格外吸引开发人员的注意。WebSocket 的出现使得浏览器提供对 Socket 的支持成为可能,从而在浏览器和服务器之间提供了一个基于 TCP 连接的双向通道。Web 开发人员可以非常方便地使用websocket构建实时web应用,开发人员的手中从此又多了一柄神兵利器。

  • webSocket协议是一个持久化协议,相对http这种非持久的协议来说。
    简单说:http1.0中,一个request对应一个response,当次访问结束
    http1.1中,多个request对应多个response,采用keep-alive;
    总归:一个req只能对应一个res,并且这个res不能主动发送给客户端,它是被动的。嗯,很被动。并且,http是无状态协议,一旦请求结束,它就会把关于请求的一切都给忘了,然后等你下次再请求的时候,还得重新认识它一下,重新发送请求,它再重新给你计算一次结果并返回给你。
  • 实时web 应用
    普通web请求通讯过程

    1.问题:比如说在线游戏、在线证券、设备监控、新闻在线播报、RSS 订阅推送等等,当客户端浏览器准备呈现这些信息的时候,这些信息在服务器端可能已经过时了。
    2.[以前的解决方案][3]
    1)ajax轮询:前端设置一个定时器,每隔一段时间,给服务器发送一个请求,然后服务器给你返回,不停的问,服务器不停的回,最后的结果,服务器弱点的话,就是崩了!
    2)long poll (长轮询):这个也是同一个机制,不过采取的是阻塞模型。客户端到服务器家借钱,服务器没有钱,说是去打工挣钱了,等挣到钱就给他,但是客户端不走,等到服务器把钱拿回来了再走,或者客户端等的时间太长了,已经超过它设定的等待时间,它就会结束这次借钱任务,然后过些时候,再过来看看,服务器是不是已经有钱了。如果说是,客户端不停的和服务器要钱,来一趟,拿走,再来一趟,拿走,那么这种方法和ajax轮询没有区别。术语:当服务器端没有数据更新的时候,连接会保持一段时间周期直到数据或状态改变或者时间过期,通过这种机制来减少无效的客户端和服务器间的交互

  • 简单的总结:(若错误请指出)
    1.性能高:为什么性能高呢,因为客户端只要一次请求,连接上了,就不再请求,等待服务器主动给客户端数据:[情景如下][3]:
    客户端:啦啦啦,我要建立Websocket协议,需要的服务:chat,Websocket协议版本:17(HTTP Request)
    服务端:ok,确认,已升级为Websocket协议(HTTP Protocols Switched)
    客户端:麻烦你有信息的时候推送给我噢。。
    服务端:ok,有的时候会告诉你的。
    服务端:有更新啦
    服务端:又有更新啦
    服务端:哈哈哈哈哈啊哈哈哈哈
    服务端:笑死我了哈哈哈哈哈哈哈
    那么为什么他会解决服务器上消耗资源的问题呢?其实我们所用的程序是要经过两层代理的,即HTTP协议在Nginx等服务器的解析下,然后再传送给相应的Handler(PHP等)来处理。简单地说,我们有一个非常快速的接线员(Nginx),他负责把问题转交给相应的客服(Handler)。本身接线员基本上速度是足够的,但是每次都卡在客服(Handler)了,老有客服处理速度太慢。,导致客服不够。Websocket就解决了这样一个难题,建立后,可以直接跟接线员建立持久连接,有信息的时候客服想办法通知接线员,然后接线员在统一转交给客户。这样就可以解决客服处理速度过慢的问题了
    [3]:https://www.zhihu.com/question/20215561
    2.双向:服务器也能主动发送数据给客户端了,不再是客户端踹一脚应一声的状态
    3.兼容性:能兼容到ie10+,chrome4+,firefox4+,opera10+,Safari5+
    4.能跨域(socket.io)


socket.io

最新文章

  1. VS2013,asp.net网站转换为web应用程序
  2. HTML速查列表
  3. 阅读<构建之法>第三10、11、12章
  4. Junit单元测试细节
  5. 感知机(python实现)
  6. C#6.0 VS2015
  7. H.264编码之DCT变换原理
  8. SQL Server2008新特性Filesteam的使用
  9. Mysql忘记密码,重新设置
  10. SQL、LINQ、Lambda 三种用法
  11. 经典sql总结(2)
  12. 自定义分页Gridview中Excel导出
  13. 从.src.rpm包中提取出完整的源码的方法
  14. 关于iOS socket的讲解介绍
  15. Android从入门到进阶——布局
  16. OGG实现两台Oracle数据库的同步
  17. Linux tcpdump命令使用方法
  18. 源码分析篇 - Android绘制流程(一)窗口启动流程分析
  19. ubuntu 12.04网络配置之设置静态iP
  20. 很好用的php在线调试工具

热门文章

  1. P3717 [AHOI2017初中组]cover
  2. Maven项目中War包的打包及依赖方式
  3. re正则表达式2
  4. 动态栅格(DEM)图层实现服务端渲染
  5. Android手机屏幕投射到电脑神器Vysor
  6. centos7环境搭建Eureka-Server注册中心集群
  7. Django创建第一个应用
  8. 分享一个开源的JavaScript统计图表库,40行代码实现专业统计图表
  9. MATLAB GUI制作快速入门
  10. 制作JPEGImages出现的bug