gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 15:31:38 24 4
gpt4 key购买 nike

我正在尝试实现从一个客户到另一个客户的聊天。在搜索时,我遇到了有趣的 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 显示所有未决消息
  • 具有获取 (GetPendingMessages) 和插入 (InsertPendingMessage) 挂起消息的方法的 DataAccess 对象。
  • Helper 类 HubHelper 维护内存中的当前客户端连接。
  • 关于asp.net-mvc-4 - 一对一使用信号器,包括离线模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21836317/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com