gpt4 book ai didi

javascript - 来自 Zeromq 的“发送后无法设置 header ”错误

转载 作者:行者123 更新时间:2023-12-03 03:21:11 25 4
gpt4 key购买 nike

我的 nodejs 应用程序使用 zeromq 与后端通信。它通常运行良好,但如果我在应用程序运行时重新启动后端,它将崩溃并报告以下消息:

events.js:163
throw er; // Unhandled 'error' event
^

Error: Can't set headers after they are sent.
at ServerResponse.setHeader (_http_outgoing.js:371:11)
at ServerResponse.header (/home/gl/Documents/client/node_modules/express/lib/response.js:592:10)
at ServerResponse.send (/home/gl/Documents/client/node_modules/express/lib/response.js:144:12)
at ServerResponse.json (/home/gl/Documents/client/node_modules/express/lib/response.js:233:15)
at exports.Socket.<anonymous> (/home/gl/Documents/client/app/routes.js:13:12)
at emitMany (events.js:127:13)
at exports.Socket.emit (events.js:204:7)
at exports.Socket.Socket._emitMessage (/home/gl/Documents/client/node_modules/zeromq/lib/index.js:640:15)
at exports.Socket.Socket._flushRead (/home/gl/Documents/client/node_modules/zeromq/lib/index.js:651:10)
at exports.Socket.Socket._flushReads (/home/gl/Documents/client/node_modules/zeromq/lib/index.js:687:15)

routes.js 看起来像这样:

module.exports = function(app) {    
var zmq = require('zeromq')
, sock = zmq.socket('dealer');
var response = null;

sock.on('message', function(data) {
response.json({data: data.toString()});
});

app.get('/data', function(req, res) {
response = res;
sock.send(['', 'low']);
});
};

这样,一旦消息来自后端,它将使用当前的 response 对象发送。这是我发现从 Zeromq 捕获响应并将响应发送回我的应用程序的最简单方法。

是什么导致该错误弹出,如果是由于我的代码设计造成的,是否有更好的方法将 Zeromq 与我的应用程序集成,以便我为应用程序的各种功能异步发送和接收消息?

最佳答案

您有两台服务器。

  • ZeroMQ
  • Express(或其他 HTTP 服务器……至少使用 app.get('/data', function(req, res) { 给人这样的印象)

…它们都在同一个 Node.js 应用程序中运行。

<小时/>

当浏览器发出 HTTP 请求时,它期望获得 HTTP 响应。

当您从浏览器收到请求时,您不会发送 HTTP 响应,而是在通过 ZeroMQ 收到消息时发送它。

因此,您会尝试多次响应同一个 HTTP 请求……这是不可能的。

<小时/>

您需要重新考虑应用程序的架构。

也许您应该使用 Socket.IO 之类的东西,这样您就可以在服务器准备好时将消息从服​​务器推送到浏览器(而不是在 HTTP 请求需要消息时)。

关于javascript - 来自 Zeromq 的“发送后无法设置 header ”错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46569308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com