在node.js脚本和客户端的Javascript之间交换数据

时间:2015-03-08 20:48:17

标签: ajax node.js sockets

我有以下情况,当通过AJAX从服务器向客户端发送多个请求时,已经发送的头问题发生了: app structure

这是我所期待的,因为我选择使用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');
});

1 个答案:

答案 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也不是特别好)。但是,通过查看调试器中的一些运行时数据结构和/或查看源代码,我总能想出高级的东西。