SignalR Scaleout получает сообщения

У меня есть функция чата, использующая SignalR, и у меня есть объединительная плата сервера sql. Когда люди общаются, сообщения прекрасно отображаются на обоих серверах. Однако, если вы обновите страницу, история чата, очевидно, исчезнет.

Поэтому, когда люди что-то говорят, я кэширую это в словаре в памяти. Проблема в том, что это сообщение не находится в памяти другого сервера, поэтому, если кто-то обновится и будет сбалансирована нагрузка, это сообщение не появится.

Можно ли в любом случае подписаться на получение событий, происходящих между сервером и объединительной платой, чтобы я мог синхронизировать два кеша?

Спасибо!


person bladefist    schedule 30.08.2015    source источник
comment
Не проще ли хранить сообщения в базе данных?   -  person radu-matei    schedule 01.09.2015


Ответы (1)


Самый простой способ решить эту проблему - хранить сообщения в базе данных, чего вы пытаетесь избежать, вероятно, потому, что SQL не самая быстрая база данных для этого.

Теперь я бы использовал другую объединительную плату SignalRс Redis для следующие причины:

  • Redis - это кеш в памяти, поэтому каждая операция будет намного быстрее (поскольку все загружается в ОЗУ)
  • у вас есть те же функции, что и с объединительной платой SQL
  • Redis имеет очень хороший сервис pub/sub, и это именно то, что вам здесь нужно.
  • на самом деле вам может не понадобиться словарь, если вы храните их в Redis, что очень быстро

Поскольку для этого есть пример от Microsoft, все поддерживается, и вы даже можете использовать только механизм pub.sub (хотя иметь 2 службы, которые делают это — SQL и Redis, возможно, не стоит).

Во всяком случае, я бы поступил так.

Надеюсь это поможет. Удачи!

person radu-matei    schedule 01.09.2015