Я использую 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) {
// ....
}
};
Я делаю что-то неправильно или это просто невозможно?
Спасибо!