Asp.net mvc 4 使用一对一的信号器,包括离线MODU
我正在尝试实现从一个客户端到另一个客户端的聊天。在搜索时,我发现了一个有趣的signar库,用于服务器推送操作 假设一个客户端向另一个客户端发送消息,但该客户端目前处于脱机状态。当他恢复在线时,他应该会看到一个通知,说明他在离线时收到了一条消息。 信号器是否将其对话存储在某个地方?如何在数据库中存储对话?当客户端收到脱机消息时,如何使其看到通知 有人能给我提供这样的教程吗?我只找到在线聊天的教程Asp.net mvc 4 使用一对一的信号器,包括离线MODU,asp.net-mvc-4,signalr,Asp.net Mvc 4,Signalr,我正在尝试实现从一个客户端到另一个客户端的聊天。在搜索时,我发现了一个有趣的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在内存中维护当前客户端连接
Context.User.Identity.Name
get assigned?@Meetesh的值,这将是