SignalR用于跟踪在线用户和聊天

Gau*_*rav 4 javascript asp.net-mvc-3 signalr

我们正在开发一个社交网络应用程序,并将实现一些新功能.1.跟踪在线用户2.聊天(一对一聊天和以后的群聊)

我调查了SingalR,看起来很有希望.我们正在使用ASP.NET MVC 3并且正在考虑使用集线器.我的问题是,SignalR是否更好而不是简单的聊天轮询?就可扩展性而言,什么会更好?我已经看到了关于SO的其他问题,但就可伸缩性而言,无法找出哪一个更好.

第二个问题是如果我们使用SignalR,我们是否可以使用它来跟踪在线用户.我们可以定期从每个客户端调用服务器端函数来说"我在线",在hub方法中我们可以在DB中设置isOnline位.一旦客户端断开连接,我们可以取消设置.这项工作或简单的民意调查会更好吗?如果我们使用简单的轮询,我们如何将用户设置为离线?

tho*_*mas 5

我也使用SignalR作为一种聊天架构.完美地运行我们的单个IIS服务器设置.对于可扩展性检查:Sclaing-out-SignalR

如果您使用的集线器,您可以通过查询像连接的客户端解决了"我在网上"问题,

var clients = Hub.GetClients<Type of your hub here>();
Run Code Online (Sandbox Code Playgroud)

并从每个客户端请求UserID.如果丢失任何连接,您必须找到数据库在线用户,这不再是集线器的客户端.

要么

另一种方法是将用户在线设置为从用户到集线器的第一条消息."嗨,我在那里".并使用此解决方案

public class MyHub : Hub, IDisconnect
{
    public Task Disconnect()
    {
        // Query the database to find the user by it's client id.
        var user = db.Users.Where(u => u.ConnectionId == Context.ConnectionId);
        return Clients.disconnected(user.Name);
    }
}
Run Code Online (Sandbox Code Playgroud)

处理断开连接事件.

希望我能给你一些想法.