Блокируют ли функции обратного вызова основной поток при использовании socket.io? - PullRequest
0 голосов
/ 04 сентября 2018

Я пытаюсь собрать свой сервер в node.js. Я использую socket.io.

Что-то похожее на это:

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

app.get('/', function(req, res){
  res.sendFile(__dirname + '/index.html');
});

io.on('connection', function(socket){
    console.log('a user connected');
    socket.on('disconnect', function(){
      console.log('user disconnected');
    });
  });

http.listen(3000, function(){
  console.log('listening on *:3000');
});

Я знаю, что IO в node.js является асинхронным, но если я вызову функцию в 'on connection', такую ​​как чтение файла, будет ли она все еще асинхронной или она заблокирует основной поток? Я не уверен, насколько я понимаю, что все, что вызывается внутри асинхронного ввода-вывода, также выполняется асинхронно без блокировки основного потока.

1 Ответ

0 голосов
/ 04 сентября 2018

Асинхронный код - это код, который запускается позже вместо блокировки, пока он чего-то ждет.

Обработчик событий подключения является асинхронным. Он не будет работать до тех пор, пока событие не произойдет (поэтому он не будет блокировать все остальное во время ожидания события).

Функция, которую вы вызываете, будет вызываться так же, как и любая другая функция. Он будет блокироваться во время работы. Если это асинхронная функция, она прекратит работу и будет ожидать того, что ожидает, без блокировки.

, например

readFileSync будет блокироваться во время чтения файла (он не будет блокироваться, пока вы не вызовете его, что не произойдет, пока не произойдет событие).

readFile не будет блокировать, по крайней мере, незначительным образом. Он будет занимать основной поток, пока настраивает чтение файла, а затем находится в спящем режиме (без блокировки), пока не будут доступны данные файла, после чего он снова проснется и передаст результат обратному вызову.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...