热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

WebSocket系列之怎样竖立和保护牢靠的衔接

概述经由过程前四篇博客,置信读者关于WebSocket的运用和数据(不论是ArrayBuffer照样String)传输都有了一个深入的相识。如今我们来引见下,我在运用WebSock
概述

经由过程前四篇博客,置信读者关于WebSocket的运用和数据(不论是ArrayBuffer照样String)传输都有了一个深入的相识。如今我们来引见下,我在运用WebSocket时,衔接相干模块碰到的一些共性题目,以及我们怎样处置惩罚这些题目。

本文作为WebSocket系列的第五篇文章,它的内容不仅仅限于前端的WebSocket致使的题目,而是连系一整套长衔接计划能够碰到的题目来举行申明。其主要内容为:

  • WebSocket竖立衔接共性题目
  • WebSocket保护衔接共性题目

经由过程这篇博客,读者能够相识在WebSocket线上临盆环境碰到的罕见衔接题目以及对应的处置惩罚计划,从而在本身碰到相干题目时能够疾速处置惩罚。
本文不触及任何前端WebSocket运用要领或教程,只是作为相干履历的总结博客。假如读者对WebSocket相干运用还没有详细的熟悉,能够浏览前四篇博客。

  • WebSocket系列之基础知识入门篇
  • WebSocket系列之Javascript中数字数据怎样转换为二进制数据
  • WebSocket系列之字符串怎样与二进制数据举行转换
  • WebSocket系列之二进制数据设想与传输
竖立衔接共性题目

怎样运用加密的WebSocket(WSS)

假如我们须要运用加密的WebSocket时,我们须要设置证书,以下几点须要注重:

  • WebSocket地点不能运用IP,必需运用域名。因为证书是针对域名来举行设置的。
  • 证书必需相符新Chrome范例,不然会涌现NET::ERR_CERT_COMMON_NAME_INVALID毛病,详细概况见Chrome协助。假如从新签订后海是涌现此题目,须要按下证书中的DNS地点是不是包括运用的域名。
  • 假如是开辟环境的自签证书,须要设置到当地证书库中,不然会涌现NET::ERR_CERT_AUTHORITY_INVALID毛病。

不支持WebSocket的环境下怎样降级

部份IE或许低版本Android手机的浏览器环境不支持WebSocket,同时Firefox38-41的部份版本WebSocket也不支持传输ArrayBuffer数据。因而,在涌现不支持WebSocket或许WebSocket衔接失利的状况时,我们须要制订相干的降级战略:

  • 依据浏览器举行推断,假如是不支持WebSocket的浏览器或许低版本Android的WebView,直接切换到长轮询计划。
  • 假如WebSocket衔接失利(初始化后马上触发了close事宜),则马上降级到长轮询计划。
保持衔接共性题目

怎样保持长衔接不断开

当前浏览器对WebSocket竖立的长衔接都有节能战略,即延续一段时候内没有数据传输时,浏览器会主动断开长衔接,依据当前测试的数据(仅供参考)来看,Chrome浏览器的主动断开时候为300秒左右,而Firefox在120秒左右。

因而,我们假如须要保持长衔接长时候不断开,须要设想特定的心跳来保持这条WebSocket衔接。在一个特定的时候距离中,客户端向后端发送一条数据,同时后端也复兴相干的数据(后端复兴是用来检测收集和后端是不是一般事情)。

我现在运用的心跳距离为45秒,即距离45秒就像后端发送一个心跳包。固然,这个时候和相干的后端效劳设置以及运用场景相干。

与此同时,后端效劳的Nginx中也有相干的长衔接保持时长设置。假如你碰到前端竖立的WebSocket衔接在距离比较短的时候就被后端主动断开(即触发close事宜),而前端没有触发任何封闭操纵,能够搜检下后端相干的时候设置项。在临盆环境中,我碰到过因为Nginx的设置参数proxy_read_timeout时候设置小于心跳距离致使的后端主动断开衔接。

怎样处置惩罚断网或许后端非常状况

在浏览器收集断开的状况下,WebSocket是不会收到任何的事宜的。因为WebSocket在断网时的表现和在线时无音讯收发的状况没法辨别,我们须要用其他的要领来举行推断和辨别。详细的要领有以下几种:

  • 运用心跳包。我们在发送心跳包后,会收到相干的返回数据。假如我们没法收到此数据,就以为现在收集或许后端非常。
  • offline事宜。浏览器会在断网后给页面发送一个offline事宜(不正确,能够作为参考),我们能够依据此事宜来断开长衔接,对用户举行相干提醒。

怎样疾速的恢复衔接

依据上面的操纵计划,我们会在收集非常时断开衔接。然则,当收集恢复时,我们须要疾速的恢复长衔接。我们能够依据以下几个计划,来恢复我们的WebSocket衔接。

  • 递增重试的时长。当我们短卡收集时,我们马上设置一个递增的时长(如[1,2,3,5,10,20]秒)来尝试恢复长衔接。
  • online事宜重置重试的时长。在浏览器收集恢复时,会发送一个online事宜(一样不正确)。在监听到online事宜时,我们只须要重置这个时长,马上尝试恢复即可(因为online事宜触发时,收集依然有能够处于发抖状况)。
  • 检测休眠重置重试的时长。当浏览器休眠时,Javascript不会实行。当电脑被叫醒时,假如online事宜没有触发,那末重试的时长有能够因为屡次尝试变成一个较大的值。因而我们在检测到休眠被叫醒后,须要马上重置重试的时长。详细要领为:设置一个setInterval,每次推断上次实行与本次实行时长距离。因为休眠时Javascript不会实行,因而,假如距离时长较大(凌驾设置阈值),我们就以为电脑休眠被叫醒了。
总结

本文经由过程总结我在线上临盆环节中碰到的WebSocket相干的衔接题目,给人人供应一些履历的总连系参考。

假如人人碰到相干的题目或许困难,能够依据上面计划举行尝试,同时也迎接留言或许私信举行讨论。


推荐阅读
  • 本文探讨了如何通过检测浏览器类型来动态加载特定的npm包,从而优化前端性能。具体而言,仅在用户使用Edge浏览器时加载相关包,以提升页面加载速度和整体用户体验。此外,文章还介绍了实现这一目标的技术细节和最佳实践,包括使用User-Agent字符串进行浏览器识别、条件加载策略以及性能监控方法。 ... [详细]
  • 字节码开发笔记:深入解析与应用技巧 ... [详细]
  • C#中实现高效UDP数据传输技术
    C#中实现高效UDP数据传输技术 ... [详细]
  • LintCode 1218. 计算补数的 JavaScript 算法
    本题要求给定一个正整数,计算其补数。补数是指将该数字的二进制表示逐位取反,然后转换回十进制得到的新数。 ... [详细]
  • com.sun.javadoc.PackageDoc.exceptions()方法的使用及代码示例 ... [详细]
  • 零拷贝技术是提高I/O性能的重要手段,常用于Java NIO、Netty、Kafka等框架中。本文将详细解析零拷贝技术的原理及其应用。 ... [详细]
  • 本文介绍如何在 Android 中自定义加载对话框 CustomProgressDialog,包括自定义 View 类和 XML 布局文件的详细步骤。 ... [详细]
  • 本文介绍如何使用线段树解决洛谷 P1531 我讨厌它问题,重点在于单点更新和区间查询最大值。 ... [详细]
  • 深入对话上海视九叶文鑫:HTML5技术引领智能电视新趋势
    深入对话上海视九叶文鑫:HTML5技术引领智能电视新趋势 ... [详细]
  • 在 Kubernetes 中,Pod 的调度通常由集群的自动调度策略决定,这些策略主要关注资源充足性和负载均衡。然而,在某些场景下,用户可能需要更精细地控制 Pod 的调度行为,例如将特定的服务(如 GitLab)部署到特定节点上,以提高性能或满足特定需求。本文深入解析了 Kubernetes 的亲和性调度机制,并探讨了多种优化策略,帮助用户实现更高效、更灵活的资源管理。 ... [详细]
  • 公司计划部署邮件服务器,考虑到已有域名,决定自行搭建内部邮件服务器。经过综合考量,最终选择在Linux环境中进行搭建,并记录了相关配置和实践过程。本文将详细介绍Postfix的基本设置步骤和实践经验,帮助读者快速掌握邮件服务器的搭建方法。 ... [详细]
  • 在CentOS上部署和配置FreeSWITCH
    在CentOS系统上部署和配置FreeSWITCH的过程涉及多个步骤。本文详细介绍了从源代码安装FreeSWITCH的方法,包括必要的依赖项安装、编译和配置过程。此外,还提供了常见的配置选项和故障排除技巧,帮助用户顺利完成部署并确保系统的稳定运行。 ... [详细]
  • 负载均衡基础概念与技术解析
    随着互联网应用的不断扩展,用户流量激增,业务复杂度显著提升,单一服务器已难以应对日益增长的负载需求。负载均衡技术应运而生,通过将请求合理分配到多个服务器,有效提高系统的可用性和响应速度。本文将深入探讨负载均衡的基本概念和技术原理,分析其在现代互联网架构中的重要性及应用场景。 ... [详细]
  • MySQL性能优化与调参指南【数据库管理】
    本文详细探讨了MySQL数据库的性能优化与参数调整技巧,旨在帮助数据库管理员和开发人员提升系统的运行效率。内容涵盖索引优化、查询优化、配置参数调整等方面,结合实际案例进行深入分析,提供实用的操作建议。此外,还介绍了常见的性能监控工具和方法,助力读者全面掌握MySQL性能优化的核心技能。 ... [详细]
  • DHCP三层交换机设置方式全局模式和接口模式设置方式和命令resetsave回车输入yreboot输入n输入y重启后就恢复默认设置了默认用户名密码adminAdmin@huawei ... [详细]
author-avatar
手机用户2602901573
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有