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

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

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

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

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

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

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

Войти через центр авторизации
Похожие вопросы
Lensoft.pro Санкт-Петербург
от 110 000 до 150 000 руб.
CS Money Санкт-Петербург
от 100 000 до 180 000 руб.
от 200 000 до 300 000 руб.
22 февр. 2019, в 11:24
30000 руб./за проект
22 февр. 2019, в 10:54
4000 руб./за проект