加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-4 – 使用信号器一对一,包括离线模式

发布时间:2020-12-16 03:59:30 所属栏目:asp.Net 来源:网络整理
导读:我正在尝试实现从一个客户端到另一个客户端的聊天.在搜索时,我遇到了有趣的SignalR库,用于服务器推送操作. 假设客户端向另一个客户端发送消息,但该客户端此时处于脱机状态.当他回到网上时,他应该看到他在离线时收到消息的通知. SignalR会将其对话存储在某个
我正在尝试实现从一个客户端到另一个客户端的聊天.在搜索时,我遇到了有趣的SignalR库,用于服务器推送操作.

假设客户端向另一个客户端发送消息,但该客户端此时处于脱机状态.当他回到网上时,他应该看到他在离线时收到消息的通知.
SignalR会将其对话存储在某个地方吗?如何在我的数据库中存储会话?如何让客户端在收到离线消息时看到通知?

任何人都可以为我提供这样的教程吗?我只找到了在线聊天教程.

亲切的问候

解决方法

SignalR本身不提供离线消息传递.

您必须将脱机消息存储在数据库或某个位置,并提供逻辑以通知用户有待处理的消息.

一个天真的实现:

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对象,包含Get(GetPendingMessages)和Insert(InsertPendingMessage)挂起消息的方法.> Helper类HubHelper用于维护内存中的当前客户端连接.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读