kitsu
Anton
Хешмап <String, Session> - у сессион есть updated
Anton
Приходится оббегать хешмап для поиска сессий у кого updated превышает таймаут
Anton
Потом их удалять с мапа
Anton
МОжет есть чтот о готовое в общем виде?
kitsu
Ну есть биективная мапа, хз там есть ли ордеринг по ключу или нет
kitsu
т.е очень вероятно, что надо все таки оббегать
kitsu
Можешь взять bimap + priority queue
Anton
Какое то оно непопулярное 281 скачиваний и 803
Маjко
Маjко
Можно заспавнить, если результат не нужен
Маjко
core.handle().spawn(future)
Anton
Нави
core.handle().spawn(future)
228 | core.handle().spawn(work);
| ^^^^^ expected struct reqwest::Error, found ()
|
= note: expected type reqwest::Error
found type ()
Маjко
Фьюча, которую ты спавнишь не должна возвращать ошибку
Маjко
То есть тип должен быть
Future<Item=T, Error=()>
Маjко
Можешь на ней просто сделать
.map_err(|_| ())
Нави
тогда заработал и
core.execute(future)
Anton
метод хешмапа - удаляет ключи которые соответствуют определенным параметрам
Anton
то есть итемы - на вход получает замыкание - для каждого эдемента его выполняет, если замыкание вернет false - удалит пару, очень удобно
Маjко
core.run(future)
Нави
асинхронный
Маjко
Чейнить фьючи
Маjко
future.and_then(|data| println!("{}", data))
Маjко
Есть еще futures-await, там более человечно всё выглядит
Маjко
Но найтли
ne_on
ребята, как правильно разработать p2p чат. При отправке сообщения нужно отправить одно и тоже сообщение каждому в сети. Если в чате 10 человек, ок. А если в чате 1000 человек это дикий оверхед. Как правильно делать p2p чат?
Маjко
Отправлять сообщение 1000 человек -- не так уж накладно, если ты там не видео шлешь
Anton
А вообще зависит от конкретной реализации протокола
ne_on
мне кажется так писать нельзя
Anton
можешь отправить 10 людям с указанием адресатов
ne_on
но я не знаю как нужно
Anton
они по идее должны расшарить
ne_on
чтобы по цепочке отправлялось, тогда задержка большая может возникнуть, особенно если добавить шифрование
Маjко
Маjко
Или это будет ненадежно, если одна из нод отвалится
ne_on
в той сети для которой предполагается этот чат, нет мультикастов бродкастов в принципе
Anton
Ну можно поковырять gossip
Маjко
Почитай про алгоритмы маршрутизации, вообще, есть вариант, что там найдешь вдохновение
Anton
https://en.wikipedia.org/wiki/Gossip_protocol
Anton
Известная реализация gossip есть в consul, но он на го =)
ne_on
да я бы не стал это на rust писать, мне слабо пока, если бы в теории это работало круто, я бы прототипировал на python, а потом уже при необходимости пытался повторить на Rust
ne_on
спасибо за наводки, может поможет
Anton
Поделись если что нить нароешь интересное =)
Маjко
Вспомнил)
Похожая штука есть в OSI, Spanning Tree Protocol, в целом может подойти тебе, с модификацией вроде контроля доставки
Маjко
Хотя тут от протокола остается только принцип -- построение минимального остовного дерева
Маjко
Но gossip, конечно, выглядит интереснее
ne_on
http://www.prismmodelchecker.org/casestudies/gossip.php
ne_on
https://www.slideshare.net/matildarhode/p2p-simulations-and-real-world-networks
ne_on
ещё важно учитывать, что даже в огромных чатах на тысячи человек, активно общается меньшинство, дапустим из тысячи только 10, из 10к — 100, остальные могут получать сообщения позже
Anton
У тебя какая цель, чат или p2p?
ne_on
у меня много утилитарных идей на основе p2p, так что цель и p2p и чат и не только чат
Anton
Чат без p2p реализауется просто, Для p2p сложнее
Anton
сначала ты должен подключатся к сети, получить пиров, вычислить соседей
Anton
Там цели другие немного
ne_on
чаты без p2p есть, irc, jabber, telegram в конце концов, зачем делать ещё один
Anton
забирать у тех кто поближе
Маjко
Маjко
Matrix-based
ne_on
matrix это jabber в другой обложке
Anton
ок у тебя чат децетрализованый?
ne_on
у меня нет чата, я как раз думаю как это должно работать в идеале
Маjко
ne_on
есть мнение, что на практике decentralized > distributed http://images.kevinhoyt.com/blockchain.vocab.9.png
Маjко
p2p != decentralized
Маjко
Да
Anton
Для p2p тебе нужно создать глобальный ресурс - с ID, например Канал, все подключившиеся синкают данные - таким образом синхронизирую сообщения
Anton
Просто данные могут хранится на серваке и раздаватся по сети, либо у клиентов, и синкатся, для защиты от подмены истории можно заюзать блокчейн =)
Anton
Вариантов масса, я вижу у тебя много свободного времени =)
Маjко
Я тоже вопрос задам: а как реализуются настоящие децентрализованные системы?
То есть не имеющие реестра нод, откуда можно узнать участников, к которым можно подцепляться?
Маjко
Как новая нода сможет войти в сеть?
Anton
Anton
дальше с тобой делятся пирами и т.д.
Anton
это если совсем без сервака, даже анонсера
Маjко
Нмапом просканить даже локалку -- долго)
Поиск нод в маленькой сети таким макаром может занять вечность
Anton