javascript - 长流程的 SignalR:发送中间消息
问题描述
我正在使用 SignalR 在服务器端开始长时间计算,并在结果可用时向客户端发布消息。输入绑定是一个 HTTP 请求。
我希望能够发回多条消息,以便通知客户端该过程的不同步骤(例如,计算开始、计算结束等)。
我尝试将不同的消息推送到 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) {
// ....
}
};
我做错了什么还是不可能?
谢谢!
解决方案
推荐阅读
- android - Flutter Error: Failed to extract manifest from APK: ProcessException: %1 is not a valid Win32 application
- rest - 我是使用堆栈还是制作独立的 API 和前端?
- python - NodeJS 中是否有等效的“base64.b85decode”?
- laravel - 在 laravel + vue.js 中使用 v-for,我试图显示一个包含用户信息的表格,但没有显示
- javascript - ReferenceError: require is not defined @react
- asp.net-core - ADFS 通过 OIDC 作为 IdentityServer4 的外部身份提供者
- oauth-2.0 - Oauth2 与 Postman 和 IdentityServer4
- node.js - Nodejs 流链承诺只写第一个
- python - Remove comma only from number separators (regular expression grouping)
- apache-flink - How to write outer join function in Flink using connect?