我正在尝试实现从一个客户端到另一个客户端的聊天。在搜索时,我遇到了有趣的SignalR库,用于服务器推送操作。
假设客户端向另一个客户端发送消息,但该客户端此时处于脱机状态。当他回到网上时,他应该看到他在离线时收到消息的通知。 SignalR会将其对话存储在某个地方吗?如何在我的数据库中存储会话?如何让客户端在收到离线消息时看到通知?
有人能为我提供这样的教程吗?我只找到了在线聊天的教程。
亲切的问候
答案 0 :(得分:11)
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;
}
}
此代码假定实现以下内容: