- Вопрос или проблема
- Ответ или решение
- Коммуникационная система для веб-приложения ASP.NET MVC
- 1. Аутентификация пользователей
- 2. Управление правами доступа
- 3. Выбор протокола передачи сообщений
- 4. Архитектура системы обмена сообщениями
- 5. Уведомления по электронной почте
- 6. Хранение сообщений
- Примеры открытых решений
- Заключение
Вопрос или проблема
Я ищу предложения для системы коммуникации, которая будет использоваться в веб-приложении asp.net mvc.
Внутренние пользователи компании и внешние пользователи должны иметь возможность отправлять сообщения друг другу. Также должно быть отправлено уведомление по электронной почте, информирующее пользователей о том, что у них есть новое сообщение в приложении.
Существуют ли какие-либо готовые открытые проекты, которые могут это сделать? Или закрытые?
Система не должна быть на каждой странице – только на одной странице. Пользователи должны иметь возможность отправить компании сообщение, и нам необходимо иметь возможность отправлять сообщения пользователям.
Прежде всего, вам нужно убедиться, что у вас есть механизм аутентификации для внутренних пользователей компании. Мой совет – вы можете использовать identity server, который является открытым исходным кодом.
http://docs.identityserver.io/en/latest/
С другой стороны, у вас должна быть система авторизации, которая контролирует права пользователей, если вам нужно ограничить права пользователей (Policy server).
Для системы коммуникации вы должны написать простую программу, использующую механизм очереди RabbitMq на mqtt. Mqtt – полезный протокол для обмена сообщениями. Есть очень хорошие примеры, которые вы можете использовать для разработки системы коммуникации.
https://github.com/MassTransit/RabbitMQ-Samples
Также я нашел два примерных кода на github для системы коммуникации. Но я думаю, вам следует использовать RabbitMq или другие брокеры mqtt. Для всех пользователей вам следует открыть соединение на брокере mqtt, когда пользователи находятся онлайн. Чтобы начать разговор, всякий раз, когда пользователь пытается отправить сообщение другому пользователю, вы должны создать конкретную тему. Затем пользователи должны подписаться на тему, относящуюся к разговору. Когда новое сообщение отправлено (опубликовано), подписанные клиенты могут получать сообщения. Это называется шаблоном pub-sub.
Вам следует подумать, что делать, если нет клиента, подписанного на тему. Если ваша система должна работать только между онлайн-пользователями, вам не нужно ничего делать. Если система должна работать также для оффлайн-пользователей, это означает, что пользователь должен получать сообщения, которые были отправлены пользователю в оффлайн-режиме. В этом случае пользователь должен получать сообщения, когда он онлайн. Итак, вам нужно использовать механизм очереди, такой как RabbitMq. После активации плагина RabbitMq mqtt очередь связывается с обменом mqtt, и сообщения будут отправлены в очередь. После этого вам нужно обрабатывать очередь, и если пользователи находятся онлайн, вы будете уведомлять пользователей с помощью событий.
Если вам нужно сохранять сообщения, вы должны использовать лог-очередь и обрабатывать ее для сохранения сообщений.
Примерные ссылки:
https://github.com/RocketChat/Rocket.Chat
https://github.com/gediminasgu/RabbitMqChat – Внимание! Этот код предоставлен для демонстрационных целей и не должен использоваться в производственной среде.
Ответ или решение
Коммуникационная система для веб-приложения ASP.NET MVC
Для реализации эффективной коммуникационной системы в веб-приложении на платформе ASP.NET MVC, вам необходимо учесть несколько ключевых факторов, включая архитектуру системы, методы аутентификации, передачу сообщений и уведомления пользователей. В данной статье мы обсудим необходимые элементы и предоставим рекомендации по выбору решения.
1. Аутентификация пользователей
Первый шаг к успешной коммуникационной системе — забота о безопасной аутентификации пользователей. Рекомендуем использовать IdentityServer, который является открытым решением для управления аутентификацией и авторизацией. Документация по IdentityServer доступна по следующей ссылке: IdentityServer Documentation.
2. Управление правами доступа
Для обеспечения безопасности системы важно внедрить механизм управления правами доступа. Это может быть реализовано с помощью политики авторизации. Политики помогут ограничить доступ к определенным сообщениям или функциям на основе роли пользователя.
3. Выбор протокола передачи сообщений
Для обмена сообщениями между внутренними и внешними пользователями можно рассмотреть использование RabbitMQ в сочетании с протоколом MQTT. RabbitMQ предлагает удобные механизмы обмена сообщениями и идеально подходит для реализации паттерна "publish/subscribe". Полезные примеры для разработки системы обмена сообщениями можно найти по следующему адресу: MassTransit RabbitMQ Samples.
4. Архитектура системы обмена сообщениями
Ваша система может работать по следующему принципу:
- Когда пользователь отправляет сообщение другому пользователю, создается уникальная тема для этого общения.
- Оба пользователя подписываются на соответствующую тему и могут обмениваться сообщениями в реальном времени.
- Если пользователь, получающий сообщение, в данный момент не онлайн, сообщение может быть отправлено в очередь RabbitMQ.
Это позволит избежать потери сообщений. Когда пользователь вернется в онлайн-режим, система извлечет все сообщения, направленные ему, и уведомит его.
5. Уведомления по электронной почте
Для отправки уведомлений о новых сообщениях можно использовать библиотеку Hangfire для фоновых задач в ASP.NET MVC. Hangfire позволяет выполнять задачи по расписанию и обрабатывать их в фоновом режиме. Сообщения можно отправлять через SMTP-сервер, используя, например, MailKit или SmtpClient.
6. Хранение сообщений
Для обеспечения долговременного хранения сообщений можно реализовать хранение в базе данных. При отправке сообщения его следует сохранять в реляционной базе данных, такой как SQL Server или PostgreSQL, чтобы обеспечить доступ к истории переписки в будущем.
Примеры открытых решений
Несколько открытых проектов, которые могут стать хорошими референсами для вашей системы:
- Rocket.Chat — мощная система для обмена сообщениями с открытым исходным кодом.
- RabbitMqChat — демонстрационный проект для обмена сообщениями с использованием RabbitMQ.
Заключение
Создание коммуникационной системы в веб-приложении ASP.NET MVC предоставляет множество возможностей для взаимодействия как внутренних, так и внешних пользователей. Успешная реализация системы требует внимательного анализа требований, выбора подходящих технологий и грамотного проектирования архитектуры. С описанными рекомендациями и примерами вы сможете разработать интуитивно понятное и надежное решение для обмена сообщениями в вашем приложении.