Цель: облегчить чат между двумя пользователями, сохранив новое сообщение в БД (отправлено в веб-интерфейс) и вытолкнуть его на один клиент для прослушивания (SignalR).Интеграция приложения REST Web API с SignalR?
Вот мои проблемы:
- Я не могу найти какие-либо шаблоны проектирования, которые касаются этого кроме Command and Query Responsibility Segregation (CQRS) Pattern и Event Sourcing Pattern. Оба они, похоже, сосредоточены на сложных приложениях реального времени. В моем приложении много традиционных функций REST, но пока единственным часовым компонентом является чат, поэтому нет необходимости использовать один из этих шаблонов.
- Существует ли более простой способ интеграции веб-сайта REST (веб-API) с компонентом реального времени (SignalR)?
- То, что я сейчас делаю, похоже, что я смешиваю две совершенно разные вещи.
Я думал попробовать:
- Муфта мой обработчик POST к моему нажимной обработчик с помощью events - хотя я не уверен, что помогает мне, потому что я не ожидал, что «отправить сообщение» часть моего приложения, чтобы развить часть из части «получать».
- Перемещение всей моей логики ввода в задание, выполняемое брокером сообщений, что опять не представляется необходимым, но создаст лучшее разделение. Мое понимание в соответствии с этим answer заключается в том, что SignalR использует брокер сообщений в памяти, чтобы широковещательная передача не ожидала получения сообщений, поэтому внешний брокер сообщений не нужен, если мне действительно не нужно масштабировать.
Возможно, мое приложение слишком просто, чтобы получить лучший дизайн?
Вот что я до сих пор:
public class chatPush
{
public chatPush(){}
public push(string msg)
{
try{
string jsonMsg = JsonConvert.SerializeObject(msg);
await Clients.User(userId).send(jsonMsg);
}
catch
{
string errorMsg = //error with msg
await Clients.User(userId).send(errorMsg);
}
}
}
async Task<IHttpActionResult> PostMessage(Message msg)
db.Messages.Add(msg);
try
{
await db.SaveChangesAsync();
}
catch
{
//return error in JSON
}
//if update succeeded push it out
_chatPush.push(jsonMsg);
return //Success or Error code