SignalR с длительным процессом: отправлять промежуточные сообщения - PullRequest
0 голосов
/ 04 мая 2020

Я использую SignalR для запуска длинных вычислений на стороне сервера и отправки сообщения клиенту, когда результат будет доступен. Привязки ввода - это HTTP-запрос.

Я хотел бы иметь возможность отправить несколько сообщений обратно, чтобы уведомить клиента о различных этапах процесса (например, начало вычислений, окончание вычислений и т. Д. * 1015). * ..).

Я пытался отправить разные сообщения в context.bindings.signalRMessages, но вижу, что все отправляется вместе в конце всего процесса. Есть ли способ отправить несколько сообщений в разное время?

Другая связанная с этим проблема заключается в том, что мой HTTP-запрос на стороне клиента остается застрявшим до конца процесса. Я хотел бы иметь возможность публиковать быстрый ответ рано, так как я получаю ответ через сообщение signalR.

Вот мой код сервера:

module.exports = async function(context, req) {
    let ID = context.bindingData.invocationId;

    context.bindings.signalRMessages = [];
    const messageQueue = context.bindings.signalRMessages;

    var postMessage = (message) => {
        message.userId = req.query.userId;
        message.isPrivate = true;
        messageQueue.push(message);
    };

    let preProcessData = preProcess(req.body.input);

    let startMessage = {
        "target": "optimStart",
        "arguments": [{ preProcessData: preProcessData }]
    };
    postMessage(startMessage); // <<<< I want this one to be sent immediately

    try {
        let optimOutput = await computeOptim(req.body.input, ID); // that's the long process

        let response = {
            optimId: ID,
            optimOutput: optimOutput
        };

        let optimCompleteMessage = {
            "target": "optimComplete",
            "arguments": [response]
        };
        postMessage(optimCompleteMessage);
    } catch (err) {
        // ....
    }

};

Я делаю что-то неправильно или это просто невозможно?

Спасибо!

...