我有以下情况,当通过AJAX从服务器向客户端发送多个请求时,已经发送的头问题发生了:
这是我所期待的,因为我选择使用AJAX而不是套接字。还有其他方法可以在服务器和客户端之间交换数据,比如使用browserify为客户端翻译发射器脚本吗?我想我无法逃脱套接字,因此我会就简单的库提出建议,因为sockets.io对于这么小的操作来说似乎太复杂了。 // ------------------------- 更新: 这是请求的node.js代码。
var maxRunning = 1;
var test_de_rf = ['rennen','ausgehen'];
function callHandler(word, cb) {
console.log("word is - " + word);
gender.gender_function_rf( word , function (result_rf) {
console.log(result_rf);
res.send(result_rf);// Here I send data back to the ajax call
setTimeout(function() { cb(null);
}, 3000);
});
}
async.eachLimit(test_de_rf, maxRunning, function(item, done) {
callHandler(item, function(err) {
if (err) throw new Error(err);
done();
});
}, function(err) {
if (err) throw new Error(err);
console.log('done');
});
答案 0 :(得分:0)
res.send()
发送并完成http响应。您只能在每个请求中调用一次,因为请求已完成并在调用后完成。这是一种发送响应的相当高级别的方式(在一次调用中一次完成所有操作)。
如果您想要为响应提供多种不同的功能,可以使用res.setHeader()
,例如res.writeHead()
,res.write()
,res.end()
(您可以调用多个时间)和{{1}}(表示响应结束)。
您可以在浏览器中使用标准webSocket API并获取webSocket模块以获得服务器端支持,或者您可以使用socket.io,它提供客户端和服务器支持以及许多更高级别的功能(例如自动重新连接,自动如果不支持webSockets,则故障转移到http轮询,等等。)。
所有这一切,如果您真正想要的是能够随时从服务器向客户端发送一些数据,那么webSocket真的是更好的方法。这是一种持久连接,受所有现代浏览器支持,并允许服务器随时向客户端发送未经请求的数据。我几乎不说socket.io很复杂。 doc在解释事物方面并不是特别出色(在开源世界中并不罕见,因为node.js doc也不是特别好)。但是,通过查看调试器中的一些运行时数据结构和/或查看源代码,我总能想出高级的东西。