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

SignalR JS Serverless如何实现连接断开的会话关闭处理

问题答复

核心结论

  • SignalR JS Serverless 架构下完全支持和Socket.IO disconnect事件对等的连接断开会话处理能力:用户关闭浏览器标签页、刷新页面、网络异常断连超时后,都会自动触发服务端的断开回调,行为和你之前用Socket.IO的体验一致。
  • 不需要额外创建自定义HttpTrigger来承接断开场景的业务逻辑,该能力是Serverless模式下SignalR的原生功能。

实现方式

你只需要通过函数的SignalR触发器绑定监听disconnected生命周期事件即可,和之前写Socket.IO断开监听的逻辑几乎没有差异,JS环境下的示例实现如下:

// 断开事件处理函数
module.exports = async function (context, connectionContext) {
    // 可从connectionContext拿到当前断开连接的ConnectionId、绑定的用户ID、所属分组等上下文信息
    const { connectionId, userId } = connectionContext;
    
    // 此处编写断开场景的业务逻辑:比如清理用户在线状态、释放会话占用资源、通知关联联系人下线等
    context.log(`连接${connectionId}已断开,对应用户:${userId}`);
}

对应的函数触发器配置(function.json)指定触发事件为disconnected即可,配置参考:

{
  "type": "signalRTrigger",
  "name": "connectionContext",
  "hubName": "你自己定义的业务Hub名称",
  "event": "disconnected",
  "direction": "in",
  "connectionStringSetting": "SignalR服务连接字符串对应的配置项名称"
}

补充说明

  • 事件触发时机和Socket.IO对齐:用户主动关闭页面、正常退出时会立刻触发断开事件;网络闪断、设备休眠等异常断连场景,会等待SignalR默认的连接超时窗口(默认30秒,支持自定义配置)确认连接不可达后触发,不会出现漏处理的情况。
  • Serverless模式下连接全生命周期由托管的SignalR服务维护,你不需要自己维护连接池、心跳检测逻辑,断开事件会由服务端主动推送到你配置的处理函数,不需要额外开发接口承接事件。
  • 除了断开事件,你还可以通过相同的触发器绑定方式监听connected事件,处理新连接接入的初始化逻辑,和Socket.IO的connection事件作用完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 20:15:40