【问题标题】:How to make two server communicate each other asynchronously如何让两台服务器异步通信
【发布时间】:2017-07-31 19:44:12
【问题描述】:

假设我有两台服务器。第一个服务器向第二个服务器发出 post 请求。请求对象的主体包含重要的原始数据。我们将这些数据作为输入到第二个服务器并对其进行处理以生成新数据,这些新数据会上传到 AWS S3 等系统。之后,我们通过在第一台服务器上发出请求,将此下载链接发送到第一台服务器。

现在,这种数据处理需要一些时间(几分钟),我们不想让第一台服务器等待这段时间。所以我想立即向我收到请求的第一台服务器发送响应,并且它的输出很快就会发送给它。现在我想知道解决这个问题的最佳方法是什么。

这是一些代码

第二台服务器

app.post('/data', function(req, res) {
  res.send('Processing started. Will send data soon');
  doProcessing(req.body, function(processedData) {  // this function takes time to complete
    console.log('Work Completed');
    request.send(url, processedData); // send the processed data back to the first server
  });
});

现在,由于 nodejs 的异步特性,此代码无法正常工作。 doProcessing 函数未完全执行。它在两者之间中断。我们可以在这里使用哪些方法。请帮忙。谢谢

【问题讨论】:

    标签: node.js api asynchronous


    【解决方案1】:

    您应该阅读有关 Socket.io 的信息。当您收到来自第二台服务器的响应时,您只需执行socket.emit 和客户端socket.on。您只需要将套接字标识符从第一台服务器传递给第二台服务器,然后将其从第二台服务器发送回 -> 第一台(您需要知道将其发送到哪里)

    您还可以在循环中创建简单的 Ajax 请求,询问服务器是否准备好操作。只需每 2-5 秒向服务器询问该链接并更新 DOM。

    【讨论】:

    • 感谢您的回复。我想你没有完全明白这个问题。我很抱歉我的描述。在这里,两台服务器相互通信。没有客户。第一台服务器正在向第二台服务器发出请求。第二台服务器处理请求对象的数据,但需要一些时间所以我想通过向第一台服务器发送响应来立即确认请求,并在一段时间后发送处理后的数据。第一个服务器在flask中,第二个服务器在nodejs中。
    • 好的。您正在从第二台服务器向第一台服务器发出请求?那么它有什么问题呢?我认为它应该有效。
    • 不,socket 的东西很好。问题是使包含链接的第二个请求返回到第一个服务器。由于我已经向第一台服务器发送了一个acknowledgment 响应,因此函数doProcessing 无法完全执行并在两者之间中断,因为我们退出了第二台服务器中的route callback。我们无法提出第二个请求。这是主要问题。
    • 你不能发送响应两次。你需要在第一个服务器中调用某种端点。我以为这个请求是github.com/request/request library。 url 类似于 firstserver/processingdone 。我会那样做。
    猜你喜欢
    • 1970-01-01
    • 2019-09-08
    • 1970-01-01
    • 2021-09-19
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    相关资源
    最近更新 更多