向Azure无服务器函数中的WebSocket客户端发送多个消息

edqdpe6u  于 2023-04-12  发布在  其他
关注(0)|答案(1)|浏览(98)

我有一个用例,可以从Azure Serverless函数向连接的WebSockets发送多个消息。
假设,客户端(通过WebSocket)向我发送数字5。然后我在Azure的Sever(较少)端收到此消息,并希望向连接的WebSocket发送5条消息。
我目前所拥有的是教程函数https://learn.microsoft.com/en-us/azure/azure-web-pubsub/quickstart-serverless?tabs=javascript

module.exports = async function (context, data) {
    context.bindings.actions = {
        "actionName": "sendToAll",
        "data": `[${context.bindingData.request.connectionContext.userId}] ${data}`,
        "dataType": context.bindingData.dataType
    };
    // UserEventResponse directly return to caller
    var response = { 
        "data": '[SYSTEM] ack.',
        "dataType" : "text"
    };
    return response;
};

当来自客户端的新消息到达时,这个无服务器函数被触发,并且通过将该消息作为函数结果返回,明确地只发送回一个消息。
我现在如何实现向连接的WebSocket发送更多消息,而不是通过返回类型而是以某种方式(例如,在向客户端发送消息之间等待一定时间)?
感谢帮助

deikduxw

deikduxw1#

首先,我创建了一个Azure webpubsub服务。

我用CLI创建了一个函数app,名为webpubsubTrigger,测试正常,参考了一下


而不是返回单个响应。WebPubSubAsyncCollector允许您向一个或多个WebSocket客户端发送多个消息。请尝试以下操作是否有效。

module.exports = async function (context, data) {
    const num = parseInt(data);
    const output = [];

    for (let i = 0; i < num; i++) {
        output.push({
            "action": "sendToAll",
            "payload": `Message ${i + 1}`
        });

        await new Promise(resolve => setTimeout(resolve, 1000));
    }

    context.bindings.webPubSub = new WebPubSubAsyncCollector(output);

    return {
        "data": `Sent ${num} messages.`,
        "dataType": "text"
    };
};

更多的参考检查下面。

相关问题