考虑一下这个简单的例子:
var BinaryServer = require('../../').BinaryServer;
var fs = require('fs');
// Start Binary.js server
var server = BinaryServer({port: 9000});
// Wait for new user connections
server.on('connection', function(client){
// Stream a flower image!
var file = fs.createReadStream(__dirname + '/flower.png');
client.send(file);
sleep_routine(5);//in seconds
});当客户端连接到服务器时,我阻塞事件大约5秒(假设时间有一些复杂的操作)。如果另一个客户连接(同时),预期会发生什么?我读到的关于NodeJS的一件事是非阻塞I/O,但是在这种情况下,第二个客户端只在第一个客户睡后才收到花,对吗?
发布于 2015-12-04 18:27:01
我读到的关于NodeJS的一件事是非阻塞I/O,但是在这种情况下,第二个客户端只在第一个客户睡后才收到花,对吗?
这是正确的,假设您正在连续5秒地阻塞同步操作。如果您执行任何文件系统IO或任何IO操作,或使用setTimeout,则其他客户端将有机会使用线程并获取花映像。因此,如果您正在进行非常繁重的cpu密集型处理,那么您有几个选择:
如果这是一个问题,我建议将1和3组合在一起;但是有那么多节点是异步的,所以很少是异步的。即使是像计算密码散列可以异步完成。这样的东西
发布于 2015-12-04 18:16:30
不-这两项请求将独立处理。因此,如果第一个请求必须等待5秒,并且由于某种原因,第二个请求只需2秒,第二个请求就会在第一个请求之前返回。
实际上,您将在第一个连接完成之前第二次调用服务器连接。但由于他们有不同的状态,你通常不会意识到这一点。
https://stackoverflow.com/questions/34094558
复制相似问题