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

如何在Azure无服务器函数中向WebSocket客户端发送多条消息

在Azure无服务器函数中向WebSocket客户端发送多条间隔消息

要实现接收客户端发送的数字后,向该客户端发送对应数量的间隔消息,你可以基于Azure Web PubSub的输出绑定,通过以下方式实现:

核心思路

  1. 定位目标客户端:通过触发事件的connectionId定向发送消息,而非广播给所有客户端。
  2. 异步间隔控制:利用await结合延迟函数,确保每条消息发送后等待指定时间再发送下一条。
  3. 逐次触发发送:在循环中更新输出绑定的actions,让Azure Web PubSub逐个处理发送请求。

实现代码

module.exports = async function (context, data) {
    // 获取触发请求的客户端连接ID
    const connectionId = context.bindingData.request.connectionContext.connectionId;
    // 解析客户端发送的数字,默认值设为5
    const messageCount = parseInt(data) || 5;

    // 循环发送指定数量的消息,每次间隔1秒
    for (let i = 1; i <= messageCount; i++) {
        // 构造定向发送到单个连接的操作
        context.bindings.actions = {
            actionName: "sendToConnection",
            connectionId: connectionId,
            data: `第 ${i} 条消息`,
            dataType: "text"
        };

        // 等待1秒后继续下一次循环
        await new Promise(resolve => setTimeout(resolve, 1000));
    }

    // 返回初始确认给客户端(可选)
    return {
        data: `将为你发送 ${messageCount} 条消息,请稍候`,
        dataType: "text"
    };
};

关键细节说明

  • 定向发送:使用sendToConnection替代示例中的sendToAll,确保消息仅发送给触发当前事件的客户端,避免干扰其他连接。
  • 间隔控制:必须使用await包裹延迟函数,否则Azure函数会直接执行完循环并结束,无法触发延迟发送。
  • 超时设置:如果需要发送大量消息或设置较长间隔,需在函数应用的配置中调整函数超时时间(默认5分钟),避免函数提前终止导致消息发送中断。

可选错误处理

如果需要处理发送过程中的异常,可添加try/catch块保证流程健壮性:

module.exports = async function (context, data) {
    const connectionId = context.bindingData.request.connectionContext.connectionId;
    const messageCount = parseInt(data) || 5;

    for (let i = 1; i <= messageCount; i++) {
        try {
            context.bindings.actions = {
                actionName: "sendToConnection",
                connectionId: connectionId,
                data: `第 ${i} 条消息`,
                dataType: "text"
            };
            context.log(`已发送第 ${i} 条消息到连接 ${connectionId}`);
            await new Promise(resolve => setTimeout(resolve, 1000));
        } catch (err) {
            context.log.error(`发送第 ${i} 条消息失败: ${err.message}`);
            // 可选择中断流程或继续发送下一条
            // break;
        }
    }

    return {
        data: `消息发送流程已完成`,
        dataType: "text"
    };
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 11:42:26