2015-02-25 1 views
0

В настоящее время мы реализуем простое чат-приложение, которое позволяет пользователям создавать разговоры и обмениваться сообщениями.Приложение для веб-чата - как правильно сохранить данные?

Наша основная установка включает в себя AngularJS на передней панели и концентраторе SignalR на задней панели. Вот как это работает:

  1. Client приложение открывает соединение WebSockets нашей услуги реального времени (на основе SignalR) и поддерживает чат обновления
  2. Пользователь начинает отправлять сообщения. Для каждого нового сообщения клиентское приложение вызывает HTTP API для его отправки.
  3. API хранит сообщение в базе данных и уведомляет нашу службу в режиме реального времени о том, что есть новое сообщение.
  4. Служба в режиме реального времени передает сообщение через веб-узлы подписанные Клиенты

Однако мы заметили, что открытие большого количества HTTP-соединений для каждого нового сообщения может быть не очень хорошей идеей, поэтому нам было интересно, следует ли использовать Websockets для отправки и получения сообщений?

Новая установка будет выглядеть следующим образом:

  1. Client приложение открывает соединение с WebSockets в режиме реального времени службы
  2. Пользователь начинает отправку сообщений. Приложение-клиент пересылает сообщения в службу реального времени с помощью Websockets
  3. Служба в режиме реального времени получает сообщение, уведомляет о нашей службе сохранения, которую он должен сохранить, а затем доставляет сообщение другим подписчикам.
  4. Служба сохранения сохраняет сообщение

Какие из этих параметров более типичны при настройке эффективной и эффективной чат-системы? Благодаря!

+0

SignalR создан для двунаправленной связи; почему ** не ** использовать открытое соединение WebSocket вместо создания другого HTTP-запроса? – wgraham

ответ

0

Вам не нужен другой http или веб-API для сохранения сообщения. Сохраняйте его в методе хаба, который передает сообщение. Вы можете использовать асинхронные методы в хабе, создать задачи async для сохранения сообщения.

Использование различного API-интерфейса persistence, тогда вызов signalr в широкоформатный неэффективен и зачем дублировать все усилия?