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

本文共 1774 字,大约阅读时间需要 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.1
    Upgrade: websocket
    Connection: Upgrade
    Sec-WebSocket-Key: sN9cRrP/n9NdMgdcy2VJFQ==
    Sec-WebSocket-Version: 13

    服务器响应头

    HTTP/1.1 101 Switching Protocols
    Upgrade: websocket
    Connection: Upgrade
    Sec-WebSocket-Accept: fFBooB7FAkLlXgRSz0BT3v4hq5s=

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

    WebSocket 与 HTTP 的关系

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

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

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

    你可能感兴趣的文章
    mysql 中索引的问题
    查看>>
    MySQL 中锁的面试题总结
    查看>>
    MySQL 中随机抽样:order by rand limit 的替代方案
    查看>>
    MySQL 为什么需要两阶段提交?
    查看>>
    mysql 为某个字段的值加前缀、去掉前缀
    查看>>
    mysql 主从
    查看>>
    mysql 主从 lock_mysql 主从同步权限mysql 行锁的实现
    查看>>
    mysql 主从互备份_mysql互为主从实战设置详解及自动化备份(Centos7.2)
    查看>>
    mysql 主从关系切换
    查看>>
    MYSQL 主从同步文档的大坑
    查看>>
    mysql 主键重复则覆盖_数据库主键不能重复
    查看>>
    Mysql 事务知识点与优化建议
    查看>>
    Mysql 优化 or
    查看>>
    mysql 优化器 key_mysql – 选择*和查询优化器
    查看>>
    MySQL 优化:Explain 执行计划详解
    查看>>
    Mysql 会导致锁表的语法
    查看>>
    mysql 使用sql文件恢复数据库
    查看>>
    mysql 修改默认字符集为utf8
    查看>>
    Mysql 共享锁
    查看>>
    MySQL 内核深度优化
    查看>>