Pull to refresh

Comments 4

И как всегда — в статьях такого плана, самое интересное в конце — есть еще вебсокеты. Вот есть у меня сейчас задача — написать мессенджер, почитал много статей, и везде сову нужно дорисовать самому. А собственно, интересны такие вопросы:
1. Сами же написали, что есть вебсокеты, socket.io. Там протокол бинарный и создан именно для этого — у автора статьи — текстовый. Ну да ладно, не о протоколах речь. О том, что в предложенных протоколах уже есть двухсторонний обмен — emit, broadcast, ping и пр.
2. Онлайн обмен даже не вызывает вопросов, хотя… Если во время отправки сообщения отвалился инет — как работать с очередями, сложить все, что нужно доотправить в sqlite и по alert'ам от календаря отправлять повторно? Сколько раз…
3. Как получать новые сообщения — от последнего id или по дате создания (с датой не совсем наверное идея, ибо зависит от локали устройства)?
4. Как быть в ситуации, когда коннектов от одного юзера несколько — яблоко и андроид, для примера? Понимаю, что что-то вроде socket.in_room(id).emit()… Но хочется подробностей.
5. В чем хранить сообщения (и очередь) на серваке — rabbit, mysql (ща полетят помидоры), mongo? Забирать все это по модному graphql или не прыгать выше головы, чтобы понимать как там все под капотом?!
6. Уведомление пушем, когда клиент не в сети — тоже момент так себе — tcp может жить и при физическом обрыве линии согласно выставленному таймауту, да даже пинги согласно протокола (socket.io, про него речь, tcp «гарантирует» доставку) не дают гарантии, что сокет клиента живой, соответственно, нам нужен ask-пакет доставки, и уже по таймауту, если ответа нет, слать пуш. Слать пуш — в канал firebase — не сложно. Интересно, как хранить все токены от одного пользователя.

И таких вопросов очень много, и больше они интересуют — техническая сторона, которую сложно найти на просторах инета. Да, есть вотсап с измененным xmpp на erlang серверах, но вот именно хочется внутрянки, у телеги вроде бы исходники открыты, но большая часть техно-«вкусняшек» скомпилено в mit_proto.

Если у хабрасообщества есть ссылки на полезную инфу в этом направлении — спасибо заранее.

Зы: Для себя вижу так — чтобы развить немного себя — берем flutter, soket.io третьей версии, firebase и sqlite, пытаемся делать все асинхронно, запрашиваем все от последнего id сообщения, на сервере — для начала берем workerman для протокола, redbean — orm для мускула с отключенным frooze (чтобы сам столбцы таблицы создавал). Закладываем сразу функционал комнат (room id), изначально только двое в диалоге. Но что-то подсказывает, что не все правильно в архитектурном смысле. Вот тут и не хватает инфы/знаний/бубна...
Мне лично не приходилось самому писать нечто подобное, но Спасибо за разбор!
Сам юзал для чатов чаще всего socket.io, rabbitMq

Такие мессенджеры как телега и ФБ используют протокол mqtt. Здесь я описал применительно к веб советам и использовал с react native https://habr.com/ru/post/469315/. Для swift есть также клиент и можно подключаться по tcp

К сожалению, именно веб-сокеты не являются «first class citizens» в свифте. Для них приходится использовать сторонние библиотеки типа Starscream и т.п.
Sign up to leave a comment.

Articles