Socket disconnect event doesn't always fire
维护者通常 2 天内回复
还没有人认领这个 Issue。
评估
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 新手友好度
- 28/100
- Issue 类型
- 缺陷
- 描述清晰度
- 需要澄清
- 活跃度
- 停滞
- 技术栈
- javascript, react-native
- 领域
- mobile-dev, networking
调研方向
未指定任何仓库文件或测试,报告中也没有复现步骤。首先在 iOS 18 上复现所提供的 Socket.IO 客户端/服务器设置,然后跟踪与过时 socket 相关的断开连接和连接健康状态行为。完成的标准是确定原因,并添加回归测试,或清楚地记录已确认的限制。
由索引模型根据 Issue 内容生成。
描述
Describe the bug
We have a React Native app using Socket.io to communicate with our servers.
Some users experience a quirk whereby leaving the app doesn't fire a disconnect event on the server for a very long time (hours).
See screenshot of some of our logs:
This also occurs upon making a io.in([...]).fetchSockets() call: those sockets still look open.
To Reproduce
N/A
Socket.IO server version: 4.8.1
Server
import { Server } from "socket.io";
const io = new SocketServer<
ClientToServerEvents,
ServerToClientEvents,
{ [event: string]: (...args: unknown[]) => void },
SocketData
>(server, {
path: "/socket",
serveClient: false,
cookie: true,
adapter: socketIoPubSubTopic
?
createAdapter(socketIoPubSubTopic)
: undefined,
});
if (socketIoPubSubTopic) {
await io.of("/").adapter.init();
log.log("Pub/sub subscription initialized for Socket.IO");
}
io.on("connection", async (socket) => {
const userId = socket.data.userId;
log.log({ userId }, `Socket connected for ${userId}`);
if (userId) {
await updateJoinedRooms(userId, socket);
}
socket.on("disconnect", () => {
log.log({ userId }, `Socket disconnected for ${userId}`);
});
});
Socket.IO client version: 4.8.1
Client
import { io } from "socket.io-client";
const newSocket: TypedSocket = io(PUBLIC_SOCKET_HOST, {
auth: !useCookies
? {
token,
}
: undefined,
path:"/socket",
ackTimeout: 10000,
retries: 12,
timeout: 5000,
reconnectionDelayMax: 5000,
withCredentials: useCookies,
});
Expected behavior
To always get the disconnect event firing.
Platform:
- Device: iPhone 14 Plus
- OS: iOS 18
Additional context
Add any other context about the problem here.
- 主要语言
- TypeScript
- 星标
- 63.2k
- 派生
- 10.2k
- 平均合并
- 6 天 4 小时
- 30 天内合并 PR
- 6
环境准备
- 没有 Dockerfile 或 Docker Compose 文件
- 有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
socketio/socket.io 的其他 Issue
-
[engine.io-client] The Node.js cookie jar lets Expires override Max-Age可能已有人在做 @Ayush701-code-zm 于 1 天前认领。 未关闭
难度 2/5 1-3 小时 新手友好度 88/100
socketio/socket.io#5590 · 1 条评论 ·
维护者通常 2 天内回复
-
Raise Engine.IO minimum to 6.6.10 for published security fixes可能已有人在做 @harshit-exe-dev 于 29 天前认领。 未关闭
难度 1/5 1-3 小时 新手友好度 78/100
维护者通常 2 天内回复
-
Can't set response headers in Server.handleUpgrade可能已有人在做 @MsfPablo 于 90 天前认领。 未关闭question
难度 2/5 1-3 小时 新手友好度 72/100
socketio/socket.io#5497 · 2 条评论 ·
维护者通常 2 天内回复
-
WebTransport ignores query parameters in URL可能已有人在做 @cyphercodes 于 178 天前认领。 未关闭needs major release question
难度 2/5 1-3 小时 新手友好度 68/100
socketio/socket.io#5496 · 3 条评论 ·
维护者通常 2 天内回复
-
[engine.io-client] close() called in an upgrade listener does not close the socket可能已有人在做 @adityajai119 今天认领。 未关闭
难度 2/5 1-3 小时 新手友好度 20/100
维护者通常 2 天内回复
查看 socketio/socket.io 的全部 Issue
相似的 Issue
-
bug
难度 2/5 1-3 小时 新手友好度 67/100
outline/outline#14529 · 1 条评论 ·
维护者通常 1 天内回复
-
难度 1/5 1-3 小时 新手友好度 86/100
g1331/phantom-circuit#93 ·
维护者通常 1 天内回复
-
bug
难度 2/5 1-3 小时 新手友好度 68/100
-
难度 2/5 1-3 小时 新手友好度 78/100
维护者通常 1 天内回复
-
compiler
难度 2/5 1-3 小时 新手友好度 74/100
HerringtonDarkholme/hd-lang#1699 ·
维护者通常 1 天内回复