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