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

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

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

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

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

Как временно исключить объекты хранящиеся в *А из event loop и включить их в event loop когда надо?
  • Вопрос задан
  • 2689 просмотров
Решения вопроса 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)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Квадро Санкт-Петербург
от 80 000 до 200 000 руб.
Lensoft.pro Санкт-Петербург
от 110 000 до 150 000 руб.
24 мая 2019, в 23:37
100000 руб./за проект
24 мая 2019, в 21:53
500 руб./в час
24 мая 2019, в 21:36
500 руб./за проект