Как реализовать общение с сервером на вебсокетах?

День добрый!

Делаю сейчас SPA на Backbone. Для realtime использую вебсокеты (SockJS). На сервере node.js

Собственно возник один вопрос: как лучше общаться клиентскому приложению с сервером - через вебсокеты или rest api? Например, я отправляю сообщение в чат. Это можно сделать так:

1. Отправляем сообщение сразу в вебсокеты и на сервере в обработчике события onmessage сохраняем сообщение в бд и рассылаем всем получателям.
2. Отправляем сообщение на сервер через HTTP REST API, сохраняем в бд и через вебсокеты отправляем всем получателям.

Какой подход более правильный? И какие минусы у них есть? Спасибо.
  • Вопрос задан
  • 3195 просмотров
Решения вопроса 1
Pifagorych
@Pifagorych
Если вам не нужен доступ с нативных клиентов, то, думаю, вебсокеты это наилучшее решение. Дело в том, что сам http и различные костыли, как polling, long polling, в принципе, не предназначены для реалтайма:
1) оверхэд на каждый запрос;
2) таймауты и постоянные реконнекты для проверки наличия новых сообщений;
3) чем больше сообщений в единицу времени, тем выше шанс его не получить (во время реконнекта);
4) когда появятся новые данные, сервер не может самостоятельно их отправить - лишь в ответ на запрос.

Вебсокеты лишены этих недостатков, и прекрасно подходят для реалтайма.

Если нужен REST API для нативных клиентов, то сделайте небольшой бэкенд на основе http: проще послать http запрос, чем извращаться с различными реализациями вебсокетов для c++ (как пример).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы