我正在一个遗留的Webforms项目(注意VB.net)中在Signalr中编写一对一聊天。基本上我正在寻找像Facebook聊天这样的结果,所以基本上只要用户登录,它们就被归类为“在线”。
我取得了一些成功。在我的登录方法中,我将登录的用户添加到OnlineUsers的静态列表中。我有一个Chat.aspx页面,当我刷新时,启动SignalR集线器连接,我可以看到登录用户(从OnConnected方法加载)。
显然我不想重新加载Chat.aspx页面以查看刚刚登录的用户,所以我的问题是,从我的主页面开始连接是否安全/高效,以便所有UI都是用户上线/下线时更新?我猜这会导致大量不必要的连接?
这是我的代码。
登录成功(添加到OnlineMembers的静态列表
OnlineMember.AddOnlineMember(member.UserId, member.UserName)
Chat.aspx
$.connection.hub.start(function () {
chat.server.getAllOnlineStatus();
});
答案 0 :(得分:0)
Raj,我认为你最好在某人实际登录时调用例行程序。
如果您有一个将用户添加到OnlineUsers列表的登录例程,则可以通过调用更新在线用户列表的方法来触发所有客户端的更新。
Chat.aspx页面中除登录以外的任何时间运行的函数都会不必要地生成负载。 SignalR的优点在于客户端的持久性以及在触发客户端例程时如何定位“全部”或“调用者”。
(这是对ASPX中注册的例程的服务器端集线器调用。如果需要,您可以将数据作为参数传递给它。)
成功登录新客户端后,可以执行以下操作: 即Clients.Caller.updateOnlineUserList(); - 或者--Clients.Caller.updateOnlineUserList(someData);
(显然你需要编写“updateOnlineUserList”的代码,它会更新页面上显示的用户列表。)