Показать сообщение отдельно
  #3 (permalink)  
Старый 07.12.2016, 17:52
Аспирант
Отправить личное сообщение для -VenoM- Посмотреть профиль Найти все сообщения от -VenoM-
 
Регистрация: 31.10.2016
Сообщений: 44

В общем, нашёл как делают по-нормальному. Есть такая штука как stream.
Т.е. при 'connect' добавляем новый сокет в нашу таблицу подключений:
streams.push(sock);      //Добавляем в массив потоков


При 'close' удаляем из таблицы тот, который отвалился


sock.on('close', function(data)//событие "клиент отключился"
{

    var i=0;
    var arr;
    streams.forEach(function(stream)
    {
        if (stream.remoteAddress==sock.remoteAddress && stream.remotePort==sock.remotePort)
        {
            if (i!=0)
            {
                streams.splice(i);
            }
            else
            {
                streams.shift();
            }
        }
        i++;
    });


Ну и далее нам в любом месте программы уже доступны все активные потоки. И можно отправлять данные вне зависимости от событий сокета.

Например, отправить в первый поток:
stream.write(streams[1].remoteAddress + ':' + data, 'utf8');
Ответить с цитированием