美文网首页复习基础编程网络知识
【腾云阁】WebSocket 浅析

【腾云阁】WebSocket 浅析

作者: 腾讯云技术社区_腾云阁 | 来源:发表于2016-11-29 16:17 被阅读1840次

作者介绍:史燕飞(英文名:Jeri),16年毕业于武汉大学并加入腾讯。目前在腾讯云从事前端开发工作,喜欢研究前端相关技术(如:计算机网络、WebKit内核、React等),也喜欢关注数据挖掘及机器学习等前沿科技。
版权归原作者所有,未经作者同意,请勿转载
文章来源:腾讯云技术社区——腾云阁:https://www.qcloud.com/community
原文链接:https://www.qcloud.com/community/article/241

在WebSocket API尚未被众多浏览器实现和发布的时期,开发者在开发需要接收来自服务器的实时通知应用程序时,不得不求助于一些“hacks”来模拟实时连接以实现实时通信,最流行的一种方式是长轮询 。 长轮询主要是发出一个HTTP请求到服务器,然后保持连接打开以允许服务器在稍后的时间响应(由服务器确定)。为了这个连接有效地工作,许多技术需要被用于确保消息不错过,如需要在服务器端缓存和记录多个的连接信息(每个客户)。虽然长轮询是可以解决这一问题的,但它会耗费更多的资源,如CPU、内存和带宽等,要想很好的解决实时通信问题就需要设计和发布一种新的协议。

WebSocket 是伴随HTML5发布的一种新协议。它实现了浏览器与服务器全双工通信(full-duplex),可以传输基于消息的文本和二进制数据。WebSocket 是浏览器中最靠近套接字的API,除最初建立连接时需要借助于现有的HTTP协议,其他时候直接基于TCP完成通信。它是浏览器中最通用、最灵活的一个传输机制,其极简的API 可以让我们在客户端和服务器之间以数据流的形式实现各种应用数据交换(包括JSON 及自定义的二进制消息格式),而且两端都可以随时向另一端发送数据。在这个简单的API 之后隐藏了很多的复杂性,而且还提供了更多服务,如:

  • 连接协商和同源策略;
  • 与既有 HTTP 基础设施的互操作;
  • 基于消息的通信和高效消息分帧;
  • 子协议协商及可扩展能力。

所幸,浏览器替我们完成了上述工作,我们只需要简单的调用即可。任何事物都不是完美的,设计限制和性能权衡始终会有,利用WebSocket 也不例外,在提供自定义数据交换协议同时,也不再享有在一些本由浏览器提供的服务和优化,如状态管理、压缩、缓存等。

随着HTML5的发布,越来越多的浏览器开始支持WebSocket,如果你的应用还在使用长轮询,那就可以考虑切换了。下面的图表显示了在一种常见的使用案例下,WebSocket和长轮询之间的带宽消耗差异:


腾讯云技术社区.jpg

相关文章

  • 【腾云阁】WebSocket 浅析

    作者介绍:史燕飞(英文名:Jeri),16年毕业于武汉大学并加入腾讯。目前在腾讯云从事前端开发工作,喜欢研究前端相...

  • WebSocket浅析

    一、WebSocket服务端创建 1.创建WebSocket服务端方式(注解) 注意:创建webSocket的服务...

  • 无标题文章

    腾云阁写文章增加富文本编辑器、从WORD导入功能 需求背景 提升作者写文章体验 需求描述 1.腾云阁Markdow...

  • 对联诗词:腾

    麒麟阁上雾腾云; 凤凰台下花遮柳。

  • 003-技术博客推荐

    腾云阁 腾云阁 分享技术干货 ,专注打造技术影响力王亮,腾讯云高级工程师。2010年加入腾讯,曾负责腾讯社交产品C...

  • websocket-浅析

    概述 WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。在 WebSo...

  • Websocket原理浅析

    写在最前,本文转自掘金[https://juejin.cn/post/6844904001654226958] 随...

  • 古老石头会唱歌(烟台记)

    古老石头会唱歌 蓬莱仙岛腾云阁 小商品,红贝壳 ...

  • WebSocket SSL 加密浅析

    1 WebSocket 原理 1.1 背景 WebSocket 是基于Http 协议的改进,Http 为无状态协议...

  • 浅析WebSocket及实践

    项目中有两个业务逻辑需要Server端主动推送Client端,之前使用了ajax轮询,众所周知,该方式缺点很明显,...

网友评论

本文标题:【腾云阁】WebSocket 浅析

本文链接:https://www.haomeiwen.com/subject/pvzapttx.html