Node.js 阻塞socket.io中的调用不会';Don’我似乎不会阻止其他客户

Node.js 阻塞socket.io中的调用不会';Don’我似乎不会阻止其他客户,node.js,socket.io,Node.js,Socket.io,我有以下代码: var schedules = io.on('connection', function(client) { var schJSON = JSON.parse(fs.readFileSync(__dirname +'huge_file.json', 'utf8')); client.json.send(schJSON); }); readFileSync作为一个阻塞调用,我认为当服务器处理一个客户端的请求时,其他客户端会排队。因此,如果读取文件大约需要10秒,并

我有以下代码:

var schedules = io.on('connection', function(client) {
    var schJSON = JSON.parse(fs.readFileSync(__dirname +'huge_file.json', 'utf8'));
    client.json.send(schJSON);
});
readFileSync
作为一个阻塞调用,我认为当服务器处理一个客户端的请求时,其他客户端会排队。因此,如果读取文件大约需要10秒,并且我启动了到服务器的三个不同连接,那么第三个连接大约需要30秒才能得到响应

实际上,所有三个客户端几乎同时得到响应(10秒后)。这三个请求是从三台不同的机器(具有相同的外部IP地址)发出的


这怎么可能呢?

我希望流程是这样的:

  • 第一个请求进入并对文件进行阻塞读取
  • 另外两个请求进入,它们的“连接”回调进入队列
  • 初始文件读取完成,异步
    client.json.send
    调用开始发送响应
  • 调用另外两个请求的回调,每个请求的
    readFileSync
    调用完成得非常快,因为文件位于磁盘缓存中,然后调用
    client.json.send
    ,以便并行发送所有三个请求的响应
  • 所有三个请求都已完成,可能几乎同时完成,因为步骤4非常快

  • 你知道磁盘的缓存能维持多久吗?因为如果我在收到响应后刷新第一个客户机,再次需要10秒才能得到响应。服务器是AppFog()的一个免费实例,如果这有帮助的话。@Amey,那么可能是将响应下载到客户端花费了10秒钟的时间。遗憾的是,情况可能并非如此。返回的json只包含一个大约30字节的字符串。@Amey我以为你说这是一个大文件?无论如何,在你的代码中添加一些日志记录来找出时间花在了哪里,因为你只需要想一想就可以做到这一点。这是一个朋友的产品代码,所以我要到下周才能使用它,我想我可能会在这里发现一些我错过的明显的东西。