首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于跟踪在线用户和聊天的SignalR

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

Stack Overflow用户
提问于 2012-03-11 19:41:19
回答 2查看 9.3K关注 0票数 4

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

我研究过SingalR,它看起来很有前途。我们正在使用ASP.NET MVC3,并且正在考虑使用hubs。我的问题首先是SignalR是不是比简单的聊天轮询更好?就可伸缩性而言,哪个更好?我在SO上看到了其他问题,但就可伸缩性而言,我找不到其中哪一个更好。

第二个问题是,如果我们使用SignalR,我们是否也可以使用它来跟踪在线用户。我们可以定期从每个客户端调用一个服务器端函数来说“我在线了”,在hub方法中,我们只需在DB中设置isOnline位。一旦客户端断开连接,我们就可以取消设置该位。这是有效的,还是简单的轮询在这里更好?如果我们使用简单的轮询,我们如何将用户设置为离线?

EN

回答 2

Stack Overflow用户

发布于 2012-03-11 20:44:30

我也在使用SignalR作为一种聊天架构。完美地工作在我们的单个IIS服务器设置中。有关可伸缩性,请查看:Sclaing-out-SignalR

如果您正在使用集线器,则可以通过查询连接的客户端(如this )来解决“我在线”问题

代码语言:javascript
复制
var clients = Hub.GetClients<Type of your hub here>();

并向每个客户端请求UserID。如果丢失任何连接,您必须找到DB online用户,这些用户不再是集线器的客户端。

另一种方法是将用户设置为从用户到集线器的第一消息。“嗨,我在那里”。并使用this solution

代码语言:javascript
复制
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);
    }
}

来处理disconnect事件。

希望我能给你一些想法。

票数 5
EN

Stack Overflow用户

发布于 2014-02-18 01:07:04

由于db连接所涉及的网络流量,SignalR比轮询更好。此外,考虑一下您的MVC项目将使用什么版本的signalR,因为最新版本的signalR只支持.net 4.5。

至于连接的数量,它取决于您有多少内存以及您在IIS中配置了多少连接。您可以在一个像样的平台上轻松处理1000+。

与Tom的回答一样,您可以截获集线器的事件或降低signalR接口,以获取计数、断开连接和连接事件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9654588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档