PiCoderman
@PiCoderman
Design | Web | React | NodeJS | Linux

Как сделать мгновенную доставку сообщений (Чат) как в ВК?

Как сделать мгновенную доставку сообщений (Чат) как в ВК? Просто мне кажется, что делать каждую секунду запрос серверу на наличие новых сообщений не хорошо. Или я чего-то не понимаю.
  • Вопрос задан
  • 2941 просмотр
Решения вопроса 1
Пригласить эксперта
Ответы на вопрос 5
Вместо long polling, лучше все же, сокеты использовать. (если того позволяют ограничения проекта)
Например: socket.io
Ответ написан
t-alexashka
@t-alexashka
░▒▓█▓▒░
Поддерживаю @Zav лучше всего nodejs (+socket.io) + SSE (server sent events)

вот тут есть сравнение методов пула и ссе

habrahabr.ru/post/120429
Ответ написан
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Просто мне кажется, что делать каждую секунду запрос серверу на наличие новых сообщений не хорошо


Да, это называется pooling, потому придумали long pooling при котором опрос сервера происходит один раз, и ждет пока не придут какие-то данные, или соединение оборвется по таймауту. А потом снова. Это позволяет уменьшить количество запросов с 1-ого в секунду до 1 скажем в пол минуты или итого меньше. Зависит от web сервера, keep alive-ов всяких и т.д. Так же делей доставки невилируется так как мы ждем до момента получения данных.

Самым же продуктивным способом является установление постоянного соединения с сервером и двусторонних обмен данным. это позволяют сделать websockets. Одно но, если браузер пользователя не поддерживает websockets нужно делать фэлбэк в long pooling. Так же пользователь может сидеть за HTTP проксями (например, как добрая половина пользователей вконтактика, с работы) которые не понимают ничего кроме старого доброго HTTP 1.1 и режут все websocket соединения.

Для php есть ratchet.
Ответ написан
@Levhav
Контакты: скайп Levhav, почта Levhav@ya.ru
Да слать каждую секунду это не то что нужно. Хотя бы по тому что данные в таком случаи будут приходить раз в секунду и не чаще.

Для того что бы клиент получил данные мгновенно надо держать с ним постоянно открытое соединение. Для php это затруднительно в плане ресурсов сервера, по этому используют комет сервер. Он как правило заточен на поддержание огромного количества открытых соединений.

Если у вас нет опыта работы с чем nо кроме php вам имеет смысл ознакомится с технологией на примере работы с комет сервисом предлагаемым по Saas модели, это быстрее чем разобратся в node.js и socket.io

Вот несколько comet сервисов.
[Ru] comet-server.ru/menu_id/10

[En] pusher.com/pricing
[En] https://www.tambur.io/pricing
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
09 дек. 2019, в 08:24
3000 руб./за проект
09 дек. 2019, в 06:17
240000 руб./за проект
09 дек. 2019, в 01:07
1000 руб./за проект