Я рассматриваю архитектуру для сообщений в реальном времени между приложениями (хостинг (веб-сайт) и установленными клиентами Windows). Поскольку клиент Windows установлен в помещении клиента, мы не будем контролировать брандмауэр, то есть открывать любые порты.Гарантированная доставка сообщений
Поэтому я подумал о том, чтобы использовать SignalR для отправки уведомлений об этом, используя http через websocket или технологию возврата. Наш клиент Windows в настоящее время использует .Net 4.0 Framework.
Я сделал некоторое исследование о гарантированной доставке сообщения через signalr, и люди предложили подтвердить сообщение с GUID, но не уверены, как я могу реализовать эту идею. Также, когда клиент не подключен, мне нужно поставить в очередь сообщение на RabbitMQ и onConnected просто отправить все сообщения из очереди.
namespace SignalRHub.Hubs
{
[Authorize]
public class ChatHub : Hub
{
public void Send(string who, string data)
{
string name = Context.User.Identity.Name;
List<string> groups = new List<string>();
groups.Add(name);
groups.Add(who);
Message message = new Message()
{
messageId = Guid.NewGuid(),
data = data
};
Clients.Groups(groups).addNewMessageToPage(name, JsonConvert.SerializeObject(message));
}
public void AcknowledgeServer(Guid messageId)
{
// Process the message acknowledge
var msgGuid = messageId;
}
public override Task OnConnected()
{
string name = Context.User.Identity.Name;
Groups.Add(Context.ConnectionId, name);
return base.OnConnected();
}
}
public class Message
{
public Guid messageId { get; set; }
public String data { get; set; }
}
}
Пожалуйста, сообщите пожалуйста?
Когда клиент A отправляет сообщение клиенту B, клиент A будет вызывать метод отправки, поэтому мне нужно добавить сообщение для репо и получить все сообщение и отправить клиенту из репо. если у вас есть несколько минут, вы можете обновить свой код, чтобы я мог лучше понять его, и я не беспокоюсь о том, что клиент получает повторяющиеся сообщения из-за потери подтверждения, и важно, чтобы они не потеряли никаких сообщений. – user1754675