@rustler2000
погромист сикраш

Как временно исключить сокет из участия в event loop?

Предположим, что есть объект\массив(*А) хранящий сокеты\коннекты\стримы\… для последующего\повторного использования.



Если писать сервеное приложения то все прекрастно.



Если же писать CLI утилиту, то пока event loop имеет объекты сама нода не завершит процесс.

Но хочется чтобы нода игнорировалла объекты из *А, чтобы не контролировать когда все асинхронные процессы в утилите завершились и убивать *А (или весть процесс (вообще недопустимо)).



Как временно исключить объекты хранящиеся в *А из event loop и включить их в event loop когда надо?
  • Вопрос задан
  • 2702 просмотра
Решения вопроса 1
@rustler2000 Автор вопроса
погромист сикраш
Node v0.9.1:

var socket = require('net').createConnection(23, function() {
    setTimeout(10000, function() {
        socket.unref(); // Исключили сокет из event loop
        setTimeout(10000, function() {
            // Нет нужды возвращать и закрывать сокет,
            // так как он уже не в event loop
            //socket.ref(); // Вернули сокет в event loop
            //socket.end(); // Закрыли сокет
            console.log('Last message!!!'); /* Когда сообщение будет выведено то нода завершит работу даже если socket все еще имеет соединение (!!!) так как он не участвует в event loop */
        }
    });
});


ref/unref for all HandleWraps, timers, servers, and sockets (Timothy J Fontaine)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы