PiCoderman
@PiCoderman

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

Как сделать мгновенную доставку сообщений (Чат) как в ВК? Просто мне кажется, что делать каждую секунду запрос серверу на наличие новых сообщений не хорошо. Или я чего-то не понимаю.
  • Вопрос задан
  • 3021 просмотр
Решения вопроса 1
samoilenkoevgeniy
@samoilenkoevgeniy
Lead Full-Stack Web Developer
Гуглите:
long polling
websocket

у вк лонг пулл
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 5
Комментировать
Вместо long polling, лучше все же, сокеты использовать. (если того позволяют ограничения проекта)
Например: socket.io
Ответ написан
t-alexashka
@t-alexashka
Сразу пишу legacy код
Поддерживаю @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
Возьмусь за разработку проектов любой сложности.
Да слать каждую секунду это не то что нужно. Хотя бы по тому что данные в таком случаи будут приходить раз в секунду и не чаще.

Для того что бы клиент получил данные мгновенно надо держать с ним постоянно открытое соединение. Для 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
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы