Alexander
нода для stateless
в моем случае наоборот: нода умеет хорошо выживать при длительной работе, без умирания от запроса к запросу
сomorsiс
за счет stateless-обработки запросов
Алексей
Alexander
за счет stateless-обработки запросов
ну смотри, чат сервер с досыланием сообщений и трекингом времени, проведенного в чате, и отключении пользователя, если его оплаченное время кончилось, это stateless разве?
сomorsiс
а через что ты сделал учет конца времени? (просто интересно)
Alexander
Alexander
Date.now() все дела
сomorsiс
а, тип каждые x минут проверял всех участников
Alexander
у кадого юзера при коннекте свой счетчик запускался, каждые x секунд проверка шла
сomorsiс
да, у тебя действительно стейтовое получилось
Alexander
в целом, даже если счетчиков много и event-loop перегружен, все компенсировалось тем, что само время проверялось по prevTime - Date.now()
Alexander
тот факт, что пользователь потратит лишние 10 секунд не оплаченных -- не проблема
Дима
Отличная позиция
Alexander
такова позиция заказчика)
Дима
Прям даж добавить нечего))
Alexander
а мое дело простое: реализовать)
Alexander
я предупредил, что под нагрузкой такая ситуация может возникнуть, заказчик согласился
Alexander
была б задача сделать максимально точный учет времени, я б наверное не ноду брал, а что-то с тредами и на каждый диалог свой тред вешал бы
Дима
А в конце на крестик повесил бы систему)
Alexander
там в целом по словам заказчика подходил даже вариант с поллингом раз в 30 секунд к php-бэкэнду, без ноды и этого вот всего, а когда он увидел чатик на ноде, в котором погрешность до 10 секунд, он оказался в восторге, так что всё норм)
сomorsiс
Alexander
обязательно оба участника диалога должны быть на месте
Alexander
единственное, таймер не учитывает AFK
Alexander
там еще перед тем, как таймер остановить проходит 5 секунд на реконнект, чтобы нельзя было абузить перезагрузку страницы. пользователь отключился, запускается пятисекундный таймер, если пользователь за это время не подключился, ставится статус офлайн и таймер чата останавливается
Alexander
если подключился, всё продолжает работать как было
Дима
Вот ето я понимаю юзер-френдли
сomorsiс
наверно это можно организовать через бд не перегружая особо эвент-луп
Alexander
Дима
Давайте грузить пользователей они бесплатные
сomorsiс
давайте просто сделаем p2p месенджер и чтоб юзеры кидали деньги на биткоин кошелек
Alexander
сomorsiс
назовем это ICO
Alexander
тут маркетолог нужен, который убедит пользователей закинуть денег)
Alexander
то что я писал, там схема стандартная: услуга-оплата
Alexander
а со стороны p2p мессенджера я не вижу услуги
Дима
Мессенджер ещё осилить надо 😃
Alexander
простейший же собирается за 5 минут
Alexander
p2p-мессенджер да, понятия не имею как делать
Alexander
да и вообще p2p мне совершенно непонятен
сomorsiс
покупаешь айпишник, обмениваешься с кем надо, общаешься
сomorsiс
//тоже непонятен на самом деле
Alexander
если хоть у кого-то есть белый айпишник, то всё становится проще, да, но если вдруг все за натом, то как быть? p2p-сеть же не должна от такого умереть. вот из-за этого я и не могу понять как это работает
Алексей
Насколько я знаю, p2p обмен - это всё ещё что-то из области чёрной магии. Куча юзеров сидят под натами-фаерволлами, а значит их как-то пробивать надо, либо как-то делать частичную централизацию.
сomorsiс
делаем на базе блокчейна с шифрованием и подписями, платишь за каждое сообщение
Alexander
Алексей
ну то есть фактически не полная децентрализация, а федерация получается
Alexander
ну да
Алексей
мне кажется есть какие-то шаманские способы организвать UDP обмен между двумя точками с серым айпи с минимальным участием белых айпи
Алексей
но по моему не со всеми типами nat это работает
Алексей
короче, всё сложно
Alexander
а в этом вопросе разве есть большая разница между UDP и TCP?
Алексей
по моему да, ведь если TCP сервер за nat, то ему уже не пробиться никак
Алексей
а UDP сокет может сам отправить кому-нибудь пакет
Алексей
и таким образом пробиться за нат
Алексей
то есть по хорошему нат должна будет для него порт выделить
Алексей
и UDP сокет тогда теоретически должен смочь получать входящие пакеты
Alexander
проблема возникает в том, что ни UDP, ни TCP не будут знать "куда" отправить этот пакет. они могут отправить пакет только на публичный адрес NAT, а как сообщить NAT куда этот пакет послать дальше -- хз
Алексей
неее
Алексей
NAT же как бы прозрачен для исходящих соединений
Алексей
то есть нужен внешний белый айпи, куда будет отправлен UDP пакет
Алексей
и по идее NAT должна у себя открыть порт на прослушивание, чтобы UDP смог ответ получить
Alexander
Peer A -> A's NAT -> Global Network -> B's NAT -> Peer B
Алексей
короче
Алексей
https://en.wikipedia.org/wiki/Interactive_Connectivity_Establishment
Alexander
вот в таком случае проблема должна быть
Алексей
Резюмирую: есть STUN, который помогает соединять два узла за NAT, но не для всех NAT он работает. А есть TURN, который тупо выступает в роли прокси и пропускает трафик через себя.
Алексей
Это всё костыли, короче. О полноценном p2p мечтать особо не приходится. И p2p сеть может быть выведена из строя, даже если не все узлы выведены из строя.
Рубикон
А ещё есть ipv6...
Eugene
Товарищи
Почитал я тут вас и у меня вопрос
Где бы знаний по сетям набраться? Книги предпочтительнее
Mykola 🤷🏼♀️
Таненбаум?
Alexander
Eugene
Не ну прям основательно
Eugene
Сети для самых маленьких я слышал все советуют
💩🔨🐒
Ой, да дайте почитать
💩🔨🐒
годная штука
💩🔨🐒
Пусть в ридере полежит