正确关闭 WebSocket(HTML5、Javascript)

2023-12-09

我正在研究 HTML5 WebSockets。我想知道如何优雅地关闭连接?例如,如果用户刷新页面或只是关闭浏览器会发生什么?

当用户只是刷新页面而不调用时,会出现奇怪的行为websocket.close()- 当他们在刷新后返回时,它会击中websocket.onclose event.


根据协议规范v76(当前支持的浏览器实现的版本):

为了干净地关闭连接,一个仅包含 0xFF 字节的帧 随后从一个对等点发送一个 0x00 字节,询问另一个对等点 关闭连接。

如果您正在编写服务器,则应确保在服务器关闭客户端连接时发送关闭帧。正常的 TCP 套接字关闭方法有时可能会很慢,并导致应用程序认为连接仍然打开,即使它没有打开。

当您关闭或重新加载页面时,浏览器确实应该为您执行此操作。但是,您可以通过捕获 beforeunload 事件来确保发送关闭帧:

window.onbeforeunload = function() {
    websocket.onclose = function () {}; // disable onclose handler first
    websocket.close();
};

我不确定页面刷新后如何获得 onclose 事件。一旦页面重新加载,websocket 对象(带有 onclose 处理程序)将不再存在。如果您在页面加载时立即尝试在页面上建立 WebSocket 连接,那么您可能会遇到这样的问题:在旧连接断开后(或者浏览器尚未准备好),服务器很快就拒绝新连接在您尝试连接的点建立连接)并且您将收到新 websocket 对象的 onclose 事件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

正确关闭 WebSocket(HTML5、Javascript) 的相关文章

  • Twitter Bootstrap 轮播在加载时自动播放

    使用twitter bootstrap框架 如何调用轮播来 自动滑动 这意味着当页面加载时 轮播会自动滚动 我尝试过 javascript onLoad click 函数 a 下一个链接的 但这不起作用 你应该这样做Twitter Boot
  • 如何在下拉列表中选择一个选项

    我正在使用 AngularJS 指令 我需要在模板中设置下拉列表的选定选项
  • getElementsByClassName & IE8:对象不支持此属性或方法[重复]

    这个问题在这里已经有答案了 I know getElementsByClassName 不支持IE8 你知道我可以用什么来代替吗 我因错误而变得烦人 对象不支持此属性或方法 HTML 代码是 function sumar var elems
  • 禁用整个站点的 IE8 加速器

    是的 我知道有类似的问题 https stackoverflow com questions 499565 is it possible to disable ie8 accelerators on my website在 SO 上 但它已
  • 如何删除从 javascript var 转义的反斜杠?

    我有这个变量 var x div class Which is div class 但是我需要 div class abcdef 我怎样才能 unes cape 这个变量来删除所有转义字符 您可以通过正则表达式将反斜杠后跟引号替换为仅引号
  • FormData 中的 Blob 为 null

    我正在尝试通过远程 API 通过 ajax 在 android 中发送创建的照片 我在用着相机图片背景 https github com an rahulpandey cordova plugin camerapicturebackgrou
  • (CSS) 倾斜 img 框架而不扭曲图像

    我正在制作一个包含许多倾斜元素的网站 如下所示 这还不错 CSS 转换可能会扭曲它 但是这个怎么样 图像没有扭曲 只是框架以倾斜的方式裁剪 最简单 最好的方法是什么 I think this http codepen io antiblan
  • 使用 jQuery/JavaScript 将文本框值复制到剪贴板

    我有一个文本框和按钮 如下所示 div class col xs 11 style padding 20px 0 div
  • 使用 Javascript eval() 100% 安全吗?

    我正在编写一个生成 Javascript 代码的 PHP 库 Javascript 代码有许多名为component001 component002 etc 页面通过 AJAX 动态加载 我需要通过 URL 变量传递组件的名称 然后由脚本进
  • 添加选项以选择框而不用 Internet Explorer 关闭该框?

    我正在尝试构建一个包含多个下拉选择框的网页 这些下拉选择框在首次打开时异步加载其选项 这在 Firefox 下工作得很好 但在 Internet Explorer 下则不然 下面是我想要实现的目标的一个小例子 基本上 有一个选择框 ID 为
  • 很奇怪!调用 window.location 或 location.replace 会重定向到该页面,然后再次返回!

    我处于调试模式 因此我可以看到正在访问哪个页面 当我打电话时window location or window location replace 它会转到该页面 然后返回原始页面 怎么会这样 解决方案是添加 window location
  • 更改特定字符串的颜色

    有谁知道如果将特定单词输入文本区域 我如何更改它的颜色 例如 如果用户输入 你好我的朋友 它会动态地将 你好 更改为绿色 在google上花了很多时间 找不到任何相关的东西 谢谢 textareas 的设计目的不是选择性着色
  • 我可以在不使用 Jquery UI 的情况下获得 Jquery Pulsate Effect 吗?

    我遇到了由于某种原因无法使用 Jquery UI 的情况 我正在尝试在不使用 Jquery UI 的情况下获得 Jquery UI 脉冲效果 与此链接类似 http docs jquery com UI Effects Pulsate ht
  • 清理 html 字符串中的所有脚本

    HTML5 剪贴板很棒 但我正在寻找一种使其安全的方法 用户正在将文本 html 粘贴到我的网页中 这允许他们粘贴图像 表格等 我正在寻找一种方法 在将粘贴的内容添加到页面之前删除所有脚本 我需要删除
  • CSS:如何在模糊的背景上剪切文本?

    我想重新创建以下样式 我想出了以下内容 问题是剪切不会影响模糊滤镜 我不知道如何解决它 这是我的 HTML 代码 glass width 40 height 100 position absolute background rgba 255
  • 不可见的 reCAPTCHA - 缺少必需的参数:sitekey

    我正在为每个带有具有类的按钮的表单动态加载不可见的 reCAPTCHAg recaptcha 我遇到的问题是验证码未正确加载 我不知道为什么 我按照验证码网站上的文档进行操作 但我不确定如何以及为什么会出现此错误 Uncaught Erro
  • d3力定向布局-链接距离优先

    在 d3 中使用力导向布局 如何使链接距离成为优先事项 同时仍然保持良好的图形布局 如果我指定动态链接距离 但保留默认费用 则我的图形距离会因费用函数而发生一些变形 并且不再是准确的距离 但是 如果我删除电荷 图表将如下所示 任何建议表示赞
  • window.open 使用 css 样式

    我想设计我的 window open 目前 我的网页上有一些项目由于解析了某个类而打开 然后在新窗口中打开指定的文本 我想更改字体大小 字体和填充等 这是我的 JavaScript 代码
  • tr 元素周围的边框不显示?

    Chrome Firefox 似乎不渲染边框tr 但如果选择器是 它会渲染边框table tr td 如何在 tr 上设置边框 我的尝试 不起作用 table tr border 1px solid black table tbody tr
  • 背景大小:封面在视网膜显示屏上看起来像素化

    可以看到我正在开发的网站here http ourcityourstory com dev 如果你查看 iPad 3 或 iPhone 4 上的 关于 或 联系 部分 背景看起来全都是疯狂的像素化 我有background size set

随机推荐

  • 一段时间后显示 UIAlertView

    我试图在一段时间后显示 UIAlertView 比如在应用程序中执行某些操作后 5 分钟 如果应用程序已关闭或在后台运行 我已经通知用户 但我想在应用程序运行时显示 UIAlertView 我尝试按如下方式调度异步 但警报永远弹出 NSTh
  • URL 以句点结尾的 WebClient 问题

    我正在运行以下代码 using WebClient wc new WebClient string page wc DownloadString URL 要访问股价网站的 URL http www shareprice co uk 如果您将
  • JPA:级联删除不会删除子级

    编辑 修改问题以更好地反映问题 最初发布的问题here 我有一个父母 Context 和一个孩子 User 实体 多对一关系 父级上的级联 REMOVE 不会删除子级 代码如下 Owning side child Entity public
  • 如何在Python中获取CSV文件的总行数?

    我正在使用 python Django 框架 来读取 CSV 文件 如您所见 我仅从该 CSV 中提取了 2 行 我一直在尝试做的是将 CSV 的总行数存储在变量中 如何获得总行数 file object myfilePath fileOb
  • OpenCart - 不发送电子邮件(通知或联系页面)

    据我所知 我的邮件设置配置正确 但我没有收到任何电子邮件 不是通过联系表单收到的 也没有收到新客户或下的任何订单的电子邮件 这是我当前的设置 我试过了 更改为 SMTP 我收到错误 我的主机 IXWebHosting 说我 需要在应用程序内
  • 在react-native中使用函数的区别

    假设我有一个向其传递函数的组件 export default class SomeComp extends Component constructor props super props someFunc gt return render
  • 在 JTextArea 中插入文本

    我正在用Java开发一个简单的应用程序 我想知道是否有任何方法可以在文本区域内插入附加文本 句子中间的某个位置 该文本区域不是空的 在光标所在的位置某些组件的点击 有人可以指导我如何完成它吗 如果这是一个JTextArea组件你可以使用 a
  • 普遍适用

    如何制作适用于 iphone 和 ipad 的通用应用程序 我们如何检测设备是 iPhone 还是 iPad 最简单的方法是使用UI USER INTERFACE IDIOM UIUserInterfaceIdiomPad and UI U
  • CSS 选择器中的逗号是什么意思? [复制]

    这个问题在这里已经有答案了 当我拥有时这意味着什么 A B A C some styles 这是否意味着B类没有样式定义 这意味着两者 A B and A C共享相同的声明块 逗号表示将该块中的声明应用于这两个选择器 而逗号后面的换行符并不
  • 在我的应用程序中使用锁屏?

    我想让我的应用程序在多任务处理时使用锁定屏幕上的音频按钮 是的 就像潘多拉一样 我想要使 用什么 API See the 多媒体远程控制文档 基本上 你只需要调用 beginReceivingRemoteControlEvents在您的共享
  • 通过迁移向列添加默认值

    如何通过迁移向已存在的列添加默认值 我能找到的所有文档都会向您展示如何在该列尚不存在的情况下执行此操作 但在本例中它确实存在 您应该这样做 change column users admin boolean default gt false
  • 反引号作为语法运算符

    刚刚遇到了一些对我来说似乎很奇怪的事情 反引号的功能类似于语法运算符 applyOp Int gt Int gt Int gt Int gt Int gt Int applyOp x op y x op y gt applyOp 2 5 7
  • 无法对多个 GWT 应用程序使用相同的 cookie

    我正在开发一个应用程序网络 我想向我的用户提供多个应用程序 他们只需注册 登录一次 并通过同一登录名使用所有应用程序 为了实现这一点 我创建了一个 cookie 在其中存储用户的会话 ID 他在登录时收到 每次用户打开应用程序时 启动模块都
  • Microsoft Graph:将文件上传到共享库而不是用户库?

    在有关的文档中Upload 列出了这些请求选项 PUT me drive items parent id filename content PUT me drive root parent path filename content PUT
  • 高图表中的不同标记大小?

    对于高图中的散点图 我希望不同的系列具有不同的标记半径 这可能吗 plotOptions series marker enabled true symbol circle radius 15 使用以下方法不起作用 plotOptions s
  • 如何获取使用 UrlFetchApp.fetch(photoLink) 获得的 jpeg 图像的大小(以像素为单位)?

    在以 HTML 格式发送电子邮件的脚本中 我添加了存储在公共共享文件夹中的图像 我使用得到的斑点UrlFetchApp fetch photoLink 但图像不一定具有正确的尺寸 因此在 html 代码中我使用宽度和高度属性 目前使用固定值
  • 检索 WordPress 根目录路径?

    如何检索 WordPress CMS 中根目录的路径 查看 WordPress 根目录中的 wp config php 文件底部 您会发现如下内容 if defined ABSPATH define ABSPATH dirname FILE
  • 已发布的 https://docs.google.com/spreadsheets 重定向到其他网址(CSV 数据)

    我们自动发布 Google 文档电子表格 一个选项卡为 CSV Google 文档提供了引用 CSV 的固定 URL 我们将此 CSV 导入到另一个用于产品数据导入的工具中 突然 这个 URL 被 Google Spreadsheet 重定
  • REMOTE_ADDR 为空,不包含在 SERVER 数组中

    搬到新服务器后我遇到了一个奇怪的问题 用于获取邮件的 cron 会检查授权 IP 其中之一默认为 127 0 0 1 移动后它停止工作 因为 REMOTE ADDR 变量未填充 它是从浏览器调用时调用的 但不是从 cron 内部运行或使用
  • 正确关闭 WebSocket(HTML5、Javascript)

    我正在研究 HTML5 WebSockets 我想知道如何优雅地关闭连接 例如 如果用户刷新页面或只是关闭浏览器会发生什么 当用户只是刷新页面而不调用时 会出现奇怪的行为websocket close 当他们在刷新后返回时 它会击中webs