You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Service Worker与Socket.io事件交互异常,如何实现Ping响应日志?

问题解决:客户端接收服务器Ping事件及Service Worker错误修复

错误提示翻译

service_worker.js:1 'offline'事件的处理程序必须在工作脚本初始求值时添加。


一、修复Service Worker错误

Service Worker对事件监听器的添加时机有严格限制,Socket.IO初始化时可能会隐式尝试添加offline/online监听器,触发该错误。解决方式如下:
在Service Worker脚本最顶部显式添加这两个事件的空监听器,同时优化Socket.IO初始化配置:

// 提前添加offline/online事件监听器,满足Service Worker要求
self.addEventListener('offline', () => {});
self.addEventListener('online', () => {});

import io from 'socket.io-client';

const socket = io('https://jwatch-9aa4eb37612b.herokuapp.com', {
  transports: ['websocket'] // 强制使用WebSocket,减少兼容性问题
});

二、实现客户端接收并记录服务器Ping响应

当前客户端代码存在两个问题:未主动向服务器发送Ping请求,以及对Socket.IO内部事件和自定义事件的混淆。修改后的完整代码如下:

// 提前添加offline/online事件监听器
self.addEventListener('offline', () => {});
self.addEventListener('online', () => {});

import io from 'socket.io-client';

const socket = io('https://jwatch-9aa4eb37612b.herokuapp.com', {
  transports: ['websocket']
});

console.log("SOCKET 已初始化");

// 连接成功后发送自定义Ping请求
socket.on('connect', () => {
  console.log("已连接到服务器");
  socket.emit('ping'); // 对应服务器端监听的'ping'事件
});

// 监听服务器返回的确认消息
socket.on('pingClient', (message) => {
  console.log(`收到服务器确认:${message}`);
  const servermessage = message; // 声明变量避免全局污染
  console.log('服务器消息:' + servermessage);
});

// 可选:监听Socket.IO内部的心跳Ping事件(非自定义业务Ping)
socket.io.on('ping', () => {
  console.log("服务器发送了心跳Ping");
});

说明

服务器端已经正确监听了ping和pingServer事件,只要客户端主动发送对应的事件,就能收到pingClient的响应消息,在控制台记录相关内容。

内容的提问来源于stack exchange,提问作者Jacob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 06:33:16