SignalR用于跟踪在线用户和聊天
SignalR for tracking online users and chat
我们正在开发一个社交网络应用程序,并将实现几个新功能。1.跟踪在线用户2.聊天(一对一聊天和稍后的群聊)
我已经研究过SingalR,它看起来很有希望。我们正在使用ASP.NET MVC 3,并且正在考虑使用集线器。我首先要问的问题是,SignalR是否比简单的聊天民意调查更好?就可伸缩性而言,什么会更好?我在SO上看到了其他问题,但就可伸缩性而言,我没能找出其中哪一个更好。
第二个问题是,如果我们使用SignalR,我们是否可以使用它来跟踪在线用户。我们可以每隔一段时间从每个客户端调用一个服务器端函数,说"我在线",在hub方法中,我们可以在DB中设置isOnline位。一旦客户端断开连接,我们就可以取消设置位。这行得通吗?还是简单的民意调查更好?如果我们使用简单的轮询,我们如何将用户设置为脱机?
我也在使用SignalR作为一种聊天架构。适用于我们的单一IIS服务器设置。对于可扩展性检查:Sclaing out SignalR
如果你使用Hubs,你可以通过查询像这样的连接客户端来解决"我在线"的问题
var clients = Hub.GetClients<Type of your hub here>();
并向每个客户端请求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);
}
}
处理断开连接事件。
希望我能给你一些想法。
SignalR比轮询更好,因为数据库连接涉及网络流量。此外,考虑一下您将在MVC项目中使用哪个版本的signalR,因为signalR的最新版本仅支持.net 4.5。
至于连接的数量,这取决于您有多少内存以及您在IIS中配置了多少连接。你可以在一台像样的钻机上轻松处理1000+。
与Tom的回答一样,您可以将事件拦截到集线器或较低的signalR接口,以获取计数、断开连接和连接事件。
- 我可以'当用户更改页面时,我无法在Iframe中获取聊天内容
- 在聊天应用程序中显示联机用户
- Gmail 聊天如何在没有长轮询的情况下向用户发送数据
- 我该如何在允许用户导航到其他页面的同时,使用strophe保持聊天会话的打开
- 在xmpp多聊天中,管理员角色只授予创建房间的在线用户成员资格
- 检测用户是否已退出聊天
- 聊天应用程序 - 当有人进入/离开房间时,用声音通知用户
- Strophe.js服务器发送不可用状态,即使对于当前正在主动聊天的用户也是如此
- PhoneGap聊天应用程序用户可以看到其他人的消息
- 如何在JS socket.io聊天中处理异步用户数据
- SignalR用于跟踪在线用户和聊天
- Node.js/Sockets-用户连接,它加载以前的消息,但它将消息加载到所有其他聊天用户,而不是刚刚连接的用户
- 群聊网络聊天圈就像facebook的群聊用户界面
- Ajax用户键入聊天消息
- Node.js聊天服务器,当另一个用户发送数据时,客户端断开连接
- 向Google IM用户发送聊天
- 格式化用户在Javascript中发送的聊天消息
- 当用户导航到不同的页面时,facebook如何保持聊天窗口打开
- 套接字.为大量用户提供可靠的聊天服务器,如果是,您的堆栈是什么?
- 在聊天脚本中验证用户的存在