Asp.net mvc 4 使用一对一的信号器,包括离线MODU

Asp.net mvc 4 使用一对一的信号器,包括离线MODU,asp.net-mvc-4,signalr,Asp.net Mvc 4,Signalr,我正在尝试实现从一个客户端到另一个客户端的聊天。在搜索时,我发现了一个有趣的signar库,用于服务器推送操作 假设一个客户端向另一个客户端发送消息,但该客户端目前处于脱机状态。当他恢复在线时,他应该会看到一个通知,说明他在离线时收到了一条消息。 信号器是否将其对话存储在某个地方?如何在数据库中存储对话?当客户端收到脱机消息时,如何使其看到通知 有人能给我提供这样的教程吗?我只找到在线聊天的教程 善意问候信号器本身不提供脱机消息 您必须将脱机消息存储在数据库或某处,并提供逻辑来通知用户挂起的消息

我正在尝试实现从一个客户端到另一个客户端的聊天。在搜索时,我发现了一个有趣的signar库,用于服务器推送操作

假设一个客户端向另一个客户端发送消息,但该客户端目前处于脱机状态。当他恢复在线时,他应该会看到一个通知,说明他在离线时收到了一条消息。 信号器是否将其对话存储在某个地方?如何在数据库中存储对话?当客户端收到脱机消息时,如何使其看到通知

有人能给我提供这样的教程吗?我只找到在线聊天的教程


善意问候

信号器本身不提供脱机消息

您必须将脱机消息存储在数据库或某处,并提供逻辑来通知用户挂起的消息

天真的实现:

public class ClientHub : Hub
{
    public SendMessage(string message, string targetUserName)
    {
        var userName = Context.User.Identity.Name;
        if (HubHelper.IsConnected(targetUserName))
        {
            Clients.User(targetUserName).sendMessage(message);
        }
        else
        {
            DataAccess.InsertPendingMessage(userName, targetUserName, message);
        }
    }

    public SendPendingMessages()
    {
            // Get pending messages for user and send it
            var meesages = DataAccess.GetPendingMessages(userName);
            Clients.User(userName).processPendingMessages(messages);    
    }

    public override Task OnConnected()
    {
        var connected = base.OnConnected();
        var userName = Context.User.Identity.Name;
        if (!string.IsNullOrWhiteSpace(userName))
        {
            HubHelper.RegisterClient(userName, Context.ConnectionId);
            SendPendingMessages();
        }
        return connected;
    }
}
此代码假定实现了以下功能:

  • 客户端函数sendMessage显示私有消息
  • 客户端函数processPendingMessages以显示所有挂起的消息
  • DataAccess对象,具有获取(GetPendingMessages)和插入(InsertPendingMessage)挂起消息的方法
  • Helper类HubHelper在内存中维护当前客户端连接

感谢您的反应!我可以问一下HubHelper是什么意思吗?那是因为我使用内存中的存储来连接(我使用SignalR v1)。你可能不需要that@thepirat000@devqon其中将是
Context.User.Identity.Name
get assigned?@Meetesh的值,这将是