Alexander
нода для stateless
в моем случае наоборот: нода умеет хорошо выживать при длительной работе, без умирания от запроса к запросу
сomorsiс
за счет stateless-обработки запросов
Алексей
за счет stateless-обработки запросов
не, нода не обязательно stateless
Alexander
за счет stateless-обработки запросов
ну смотри, чат сервер с досыланием сообщений и трекингом времени, проведенного в чате, и отключении пользователя, если его оплаченное время кончилось, это stateless разве?
Mykola 🤷🏼‍♀️
нода для stateless
не, это точно спорное утверждение)
сomorsiс
а через что ты сделал учет конца времени? (просто интересно)
Alexander
Date.now() все дела
сomorsiс
а, тип каждые x минут проверял всех участников
Alexander
у кадого юзера при коннекте свой счетчик запускался, каждые x секунд проверка шла
сomorsiс
да, у тебя действительно стейтовое получилось
Alexander
в целом, даже если счетчиков много и event-loop перегружен, все компенсировалось тем, что само время проверялось по prevTime - Date.now()
Alexander
тот факт, что пользователь потратит лишние 10 секунд не оплаченных -- не проблема
Дима
Отличная позиция
Alexander
такова позиция заказчика)
Дима
Прям даж добавить нечего))
Alexander
а мое дело простое: реализовать)
Alexander
я предупредил, что под нагрузкой такая ситуация может возникнуть, заказчик согласился
Alexander
была б задача сделать максимально точный учет времени, я б наверное не ноду брал, а что-то с тредами и на каждый диалог свой тред вешал бы
Дима
А в конце на крестик повесил бы систему)
Alexander
там в целом по словам заказчика подходил даже вариант с поллингом раз в 30 секунд к php-бэкэнду, без ноды и этого вот всего, а когда он увидел чатик на ноде, в котором погрешность до 10 секунд, он оказался в восторге, так что всё норм)
Alexander
а юзер может отключиться от чата, тогда его минуты не тратятся, так?
таймер выключется, если хоть один из юзеров из диалога дисконнектнулся, по мнению socket.io. после реконнекта таймер возобновляется
Alexander
обязательно оба участника диалога должны быть на месте
Alexander
единственное, таймер не учитывает AFK
Alexander
там еще перед тем, как таймер остановить проходит 5 секунд на реконнект, чтобы нельзя было абузить перезагрузку страницы. пользователь отключился, запускается пятисекундный таймер, если пользователь за это время не подключился, ставится статус офлайн и таймер чата останавливается
Alexander
если подключился, всё продолжает работать как было
Дима
Вот ето я понимаю юзер-френдли
сomorsiс
наверно это можно организовать через бд не перегружая особо эвент-луп
Alexander
Вот ето я понимаю юзер-френдли
если это сарказм, то какие другие варианты есть?
Дима
Давайте грузить пользователей они бесплатные
сomorsiс
давайте просто сделаем p2p месенджер и чтоб юзеры кидали деньги на биткоин кошелек
сomorsiс
назовем это ICO
Alexander
тут маркетолог нужен, который убедит пользователей закинуть денег)
Alexander
то что я писал, там схема стандартная: услуга-оплата
Alexander
а со стороны p2p мессенджера я не вижу услуги
Дима
Мессенджер ещё осилить надо 😃
Alexander
Мессенджер ещё осилить надо 😃
смотря насколько сложный мессенджер)
Alexander
простейший же собирается за 5 минут
Alexander
p2p-мессенджер да, понятия не имею как делать
Alexander
да и вообще p2p мне совершенно непонятен
сomorsiс
покупаешь айпишник, обмениваешься с кем надо, общаешься
сomorsiс
//тоже непонятен на самом деле
Alexander
если хоть у кого-то есть белый айпишник, то всё становится проще, да, но если вдруг все за натом, то как быть? p2p-сеть же не должна от такого умереть. вот из-за этого я и не могу понять как это работает
Алексей
Насколько я знаю, p2p обмен - это всё ещё что-то из области чёрной магии. Куча юзеров сидят под натами-фаерволлами, а значит их как-то пробивать надо, либо как-то делать частичную централизацию.
сomorsiс
делаем на базе блокчейна с шифрованием и подписями, платишь за каждое сообщение
Alexander
Насколько я знаю, p2p обмен - это всё ещё что-то из области чёрной магии. Куча юзеров сидят под натами-фаерволлами, а значит их как-то пробивать надо, либо как-то делать частичную централизацию.
пока всё что мне известно, пользователи с белым ip становятся точками этой централизации, плюс может быть сервер, на случай, если пользователей с белым ip не нашлось
Алексей
ну то есть фактически не полная децентрализация, а федерация получается
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
Сети для самых маленьких я слышал все советуют
💩🔨🐒
Ой, да дайте почитать
💩🔨🐒
годная штука
💩🔨🐒
Пусть в ридере полежит