请选择 进入手机版 | 继续访问电脑版

默认
打赏 发表评论 4
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
理论联系实际:从零理解WebSocket的通信原理、协议格式、安全性
微信扫一扫关注!

本文来自云栖社区程序猿小卡的技术分享。


1、前言


WebSocket的出现,使得浏览器具备了实时双向通信的能力。本文由浅入深,介绍了WebSocket如何建立连接、交换数据的细节,以及数据帧的格式。此外,还简要介绍了针对WebSocket的安全攻击,以及协议是如何抵御类似攻击的。

2、参考文章



3、更多资料


Web端即时通讯新手入门贴:
新手入门贴:详解Web端即时通讯技术的原理

Web端即时通讯技术盘点请参见:
Web端即时通讯技术盘点:短轮询、Comet、Websocket、SSE

关于Ajax短轮询:
找这方面的资料没什么意义,除非忽悠客户,否则请考虑其它3种方案即可。

有关Comet技术的详细介绍请参见:
Comet技术详解:基于HTTP长连接的Web端实时通信技术
WEB端即时通讯:HTTP长连接、长轮询(long polling)详解
WEB端即时通讯:不用WebSocket也一样能搞定消息的即时性
开源Comet服务器iComet:支持百万并发的Web端即时通讯方案

更多WebSocket的详细介绍请参见:
新手快速入门:WebSocket简明教程
WebSocket从入门到精通,半小时就够!
理论联系实际:从零理解WebSocket的通信原理、协议格式、安全性
八问WebSocket协议:为你快速解答WebSocket热门疑问
Socket.IO介绍:支持WebSocket、用于WEB端的即时通讯的框架
socket.io和websocket 之间是什么关系?有什么区别?

有关SSE的详细介绍文章请参见:
SSE技术详解:一种全新的HTML5服务器推送事件技术

更多WEB端即时通讯文章请见:
http://www.52im.net/forum.php?mod=collection&action=view&ctid=15

4、什么是WebSocket


HTML5开始提供的一种浏览器与服务器进行全双工通讯的网络技术,属于应用层协议。它基于TCP传输协议,并复用HTTP的握手通道。(更多WebSocket的相关介绍,可参见“参考文章”这一节

对大部分web开发者来说,上面这段描述有点枯燥,其实只要记住几点:

  • WebSocket可以在浏览器里使用;
  • 支持双向通信;
  • 使用很简单。

4.1有哪些优点


说到优点,这里的对比参照物是HTTP协议,概括地说就是:支持双向通信,更灵活,更高效,可扩展性更好。

具体优化如下:

  • 1)支持双向通信,实时性更强;
  • 2)更好的二进制支持;
  • 3)较少的控制开销:
    连接创建后,ws客户端、服务端进行数据交换时,协议控制的数据包头部较小。在不包含头部的情况下,服务端到客户端的包头只有2~10字节(取决于数据包长度),客户端到服务端的的话,需要加上额外的4字节的掩码。而HTTP协议每次通信都需要携带完整的头部;
  • 4)支持扩展:
    ws协议定义了扩展,用户可以扩展协议,或者实现自定义的子协议(比如支持自定义压缩算法等)。

对于后面两点,没有研究过WebSocket协议规范的同学可能理解起来不够直观,但不影响对WebSocket的学习和使用。

4.2需要学习哪些东西


对网络应用层协议的学习来说,最重要的往往就是连接建立过程、数据交换教程。当然,数据的格式是逃不掉的,因为它直接决定了协议本身的能力。好的数据格式能让协议更高效、扩展性更好。

下文主要围绕下面几点展开:

  • 如何建立连接;
  • 如何交换数据;
  • 数据帧格式;
  • 如何维持连接。

5、入门例子


在正式介绍协议细节前,先来看一个简单的例子,有个直观感受。例子包括了WebSocket服务端、WebSocket客户端(网页端)。

本节完整例代码请下载本附件:
《理论联系实际:从零理解WebSocket的通信原理、协议格式、安全性)例子代码(52im.net).rar (3 KB , 下载次数: 40 , 售价: 2 金币)

即时通讯网 - 即时通讯开发者社区! 来源: - 即时通讯开发者社区!

本帖已收录至以下技术专辑

推荐方案
评论 4
太棒了,几乎解答了我关于websocket的所有疑惑
引用:Hiiro 发表于 2022-02-20 00:44
太棒了,几乎解答了我关于websocket的所有疑惑

签名: 《移动端常见白屏问题优化之网络优化篇》http://www.52im.net/thread-4700-1-1.html
楼主,想问下使用netty实现websocket,传输数据过程中会不会出现拆包粘包的问题呢?需要做处理吗?
签名: 累~~~~~~
引用:ly8051033 发表于 2024-07-16 23:16
楼主,想问下使用netty实现websocket,传输数据过程中会不会出现拆包粘包的问题呢?需要做处理吗?

websocket协议层就处理好了,它有帧的概念,tcp本身没有这个。
签名: 《移动端常见白屏问题优化之网络优化篇》http://www.52im.net/thread-4700-1-1.html
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部