博客
关于我
微信小程序网络之WebSocket(场景篇)(6)
阅读量:144 次
发布时间:2019-02-28

本文共 1767 字,大约阅读时间需要 5 分钟。

WebSocket 是一种基于 TCP 协议的网络通信协议,自 2011 年被 IETF 定为标准 RFC 6455,并在 RFC 7936 中得到补充。WebSocket 的 API 已经被 W3C 定为标准。与 HTTP 的唯一关联是通过 HTTP 协议的 101 状态码进行协议切换,WebSocket 使用的 TCP 端口是 80,这使得它能够绕过大多数防火墙的限制。

WebSocket 的核心优势在于它允许客户端和服务器之间建立持久连接。一旦握手成功,数据可以双向传输,服务器可以主动推送数据到客户端,无需客户端进行请求。这与 HTTP 的被动通信模式形成了鲜明对比。

WebSocket 的误区

  • 标准但不局限于 HTML:WebSocket 是一种标准协议,但并不意味着它只能在基于浏览器的应用中使用。它可以在任何需要实时数据通信的应用中应用。

  • 与 Node.js 的关系:WebSocket 与 Node.js 并没有必然的联系。Node.js 只是提供了一种更便捷的实现方式。

  • WebSocket 的使用场景

    WebSocket 的优势在于支持实时数据交换,并且被所有现代浏览器支持。以下是一些典型使用场景:

  • 社交订阅:用户可以实时了解朋友的动态,例如家庭成员的重大消息或朋友的订婚消息,而不需要等待多分钟的延迟。

  • 多玩家游戏:在不依赖插件的情况下,WebSocket 允许开发者在浏览器中实现高性能的游戏互动,确保玩家动作的实时反馈。

  • 协同编辑与编程:WebSocket 适用于分布式开发团队,允许团队成员在同一文档上进行实时协作,避免版本控制的复杂性。

  • 点击流数据:WebSocket 可以高效收集用户与网站的互动数据,例如鼠标移动轨迹或页面点击记录,便于后续分析。

  • 股票基金报价:WebSocket 支持实时更新股票和基金价格,确保用户获得最新的市场动态。

  • 体育实况更新:WebSocket 可以提供实时的比赛进展,满足运动迷对最新动态的渴望。

  • 多媒体聊天:结合 getUserMedia API 和 HTML5 音视频元素,WebSocket 可以实现高效的实时视频会议。

  • 基于位置的应用:WebSocket 可以实时更新用户位置数据,例如运动员的训练数据,提高数据传输效率。

  • 在线教育:WebSocket 支持多媒体聊天、协作和实时互动,提升在线学习的体验。

  • WebSocket 相对 HTTP 的优势

  • 小型协议头:WebSocket 的协议头较小,有效数据占比高,提高传输效率。

  • 服务器推送:WebSocket 允许服务器主动向客户端推送数据,具有更强的实时性。

  • WebSocket 请求的辨别

    WebSocket 请求通过 HTTP 进行握手,握手成功后数据通过 TCP 通道传输。以下是 WebSocket 请求的示例:

    客户端请求头

    GET / HTTP/1.1Upgrade: websocketConnection: UpgradeSec-WebSocket-Key: sN9cRrP/n9NdMgdcy2VJFQ==Sec-WebSocket-Version: 13

    服务器响应头

    HTTP/1.1 101 Switching ProtocolsUpgrade: websocketConnection: UpgradeSec-WebSocket-Accept: fFBooB7FAkLlXgRSz0BT3v4hq5s=

    服务器在响应中使用 Sec-WebSocket-Accept 字段确认客户端的支持能力。如果握手成功,数据将通过 WebSocket 通道进行传输。

    WebSocket 与 HTTP 的关系

    WebSocket 和 HTTP 的主要区别在于连接类型。HTTP 是无状态的短连接协议,每次请求都建立新的连接,而 WebSocket 是一种持久连接协议,允许客户端和服务器保持长时间的连接,以便实时数据传输。

    通过对 WebSocket 和 HTTP 的理解,我们可以更好地选择适合业务需求的协议。短连接适合 HTTP,而 WebSocket 则适合需要实时数据传输和服务器推送的场景。在微信小程序开发中,根据具体业务需求选择合适的协议可以显著提升应用的性能和用户体验。

    转载地址:http://vhad.baihongyu.com/

    你可能感兴趣的文章
    Mysql学习总结(81)——为什么MySQL不推荐使用uuid或者雪花id作为主键?
    查看>>
    Mysql学习总结(82)——MySQL逻辑删除与数据库唯一性约束如何解决?
    查看>>
    Mysql学习总结(83)——常用的几种分布式锁:ZK分布式锁、Redis分布式锁、数据库分布式锁、基于JDK的分布式锁方案对比总结
    查看>>
    Mysql学习总结(84)—— Mysql的主从复制延迟问题总结
    查看>>
    Mysql学习总结(85)——开发人员最应该明白的数据库设计原则
    查看>>
    Mysql学习总结(8)——MySql基本查询、连接查询、子查询、正则表达查询讲解
    查看>>
    Mysql学习总结(9)——MySql视图原理讲解与使用大全
    查看>>
    Mysql学习笔记 - 在Centos7环境下离线安装Mysql
    查看>>
    MySQL学习笔记十七:复制特性
    查看>>
    Mysql学习第一课-mysql的定义及sql语句
    查看>>
    mysql学号的字符长度_MYSQL--2
    查看>>
    mysql安全模式: sql_safe_updates
    查看>>
    mysql安装,卸载,连接
    查看>>
    MySQL安装之没有配置向导
    查看>>
    mysql安装出现 conflicts with mysql*的解决办法
    查看>>
    mysql安装卡在最后一步解决方案(附带万能安装方案)
    查看>>
    mysql安装和启动命令小结
    查看>>
    Mysql安装教程(命令行)
    查看>>
    mysql安装版安装
    查看>>
    MySQL安装配置教程(非常详细),从零基础入门到精通,看完这一篇就够了
    查看>>