SignalR. Насколько я понял, то базовых методов для получения списка групп нет. Думаю создать список групп самому. Где можно хранить такой список? В самом хабе или за его пределами? Или идея полный бред?
عندما يتعلق الأمر بتخزين قائمة المجموعات الخاصة بك، لديك العديد من الخيارات. يمكنك تخزين قائمة المجموعات في المركز نفسه، باستخدام مجموعة أو قاموس، على سبيل المثال. سيسمح لك ذلك بإضافة المجموعات وإزالتها والوصول إليها بسهولة. إذا كنت بحاجة إلى حفظ قائمة المجموعات بين عمليات تشغيل التطبيقات المختلفة أو على خوادم مختلفة، فقد تحتاج إلى تخزين بيانات خارجية مثل قاعدة بيانات أو ذاكرة تخزين مؤقت. يمكنك، على سبيل المثال، استخدام قاعدة بيانات SQL أو حل NoSQL لتخزين معلومات حول المجموعات. في النهاية، يعتمد المكان الذي تختاره لتخزين قائمة مجموعتك على متطلباتك المحددة وبنية التطبيق الخاص بك.
Нету как я помню. И это не с проста. Желательно подумать как обойтись без этого. Иначе можно потерять масштабируемость
SignalR хостится в приложении, но есть такая штука Azure SignalR service. Это отдельный ажуровский сервис, который хостит SignalR. К нему можно прицепить несколько инстансев приложения - для твоего приложение будет не отличимо используется ли self-hosted signalR или azure service. Это то, как масштабируется (горизонтально) SignalR. Поэтому нужно хорошо подумать прежде чем колхозить методы для перечисления групп. Так как если они будут в памяти, то не будут шариться между инстансами
У меня загвоздка в следующем. Есть задание реализовать простой чат, где можно создавать группы,коннектится к ним и т.д. Если я правильно понял метод AddToGroupAsync(connectionId, groupName) добавляет юзера в группу и если не находит группу с таким именем - автоматически создаёт её. А мне надо как-то проверять, существует такая группа или нет. Если нет - то возвращать ошибку, что группа не существует.
Не знаю как хранить в "самом хабе". В целом если известно что всегда будет 1 экземпляр приложения, то можно где угодно. Если же несколько, то нужно хранить вне приложения. В базе или в редисе
А, ну тогда все просто. Получается у тебя не динамические группы Тебе нужно хранилище (таблица в базе например) со списком групп. Если в таблице есть группа, то AddToGroupAsync, если нету то ошибка
А можете ещё подсказать, как реализовать лучше "удаление" группы? Логика должна быть след.: "Удалить" группу может только создатель (храним инфу по группе и создателю в БД) и только после отключения всех юзеров из чата. Как удалить юзеров, ведь для удаления нужно знать их connectionId ? Т.е. у меня проблема с тем, чтобы правильно получить и хранить connectionId юзеров. Вариант вижу такой: Когда юзер подключается к чату через метод хаба Join() внутри этого метода сохранять connectionId в БД А методе API, который "удаляет" группу, получать все connectionId указанной группы и в цикле вызывать RemoveFromGroupAsync() для каждого connectionId.
Это может быть очень плохо по производительности. Что если было 10.000 подключений за неделю. 9990 уже отключилась и администратор удаляет группу
Я на самом деле не особо шарю в теме =( Возможно нужно трекать подключения и отключения . Т.е иметь актуальный список подключений в бд . Читани статью https://learn.microsoft.com/en-us/aspnet/signalr/overview/guide-to-the-api/working-with-groups#storedatabase
А если переопределить метод OnDisconneсtedAsync() и внутри него удалять информацию пользователя со связанной группой?
Ну да. Видимо что-то такое нужно. А можно ещё хелс-чек. Типа юзер раз в минуту должен отправлять уведомления "я он лайн, в такой-то группе". В таблице юзеру обновлять дату последнего хелсчека. Раз в 10 минут допустим запускать Джобу и мочить всех юзеров, кто больше 2 минут не репортал что он онлайн. За счёт таблица будет чиститься
Дискотектед переопределить вроде как проще. Нужно просто изучить насколько это надёжный механизм. Не будут юзеры копиться
Обсуждают сегодня