我正试着适应SignalR。但我需要一个黄金点才能完全理解它。我感觉离抓捕只有一步之遥.
我的密码:
Javascript:
$(function() {
var connection = $.connection.signalR;
connection.client.broadcastTotalOnline = function (totalOnlineUser) {
$('#TotalOnline').html(totalOnlineUser);
};
$.connection.hub.start().done(function() {
console.log("Connection Started!");
});
});C#:
public class SignalR : Hub
{
public void SendTotalOnline()
{
var context = GlobalHost.ConnectionManager.GetHubContext<SignalR>();
using (var dbContextx = new db_Oyun())
{
while (true)
{
int totalOnlineUser = dbContextx.tbl_User.Count(x => x.Online);
context.Clients.All.broadcastTotalOnline(totalOnlineUser);
Thread.Sleep(1000);
}
}
}
}上面的代码是完美的,但是当我用AJAX调用新页面到内部内容时。然后我想使用相同的集线器,相同的对象和相同的集线器,不同的对象。不起作用。没有调用警报;但是当我删除上面的signalR代码时,在代码下工作。
$(function () {
var connection = $.connection.signalR;
connection.client.broadcastTotalOnline = function (totalOnlineUser) {
alert(totalOnlineUser);
};
});发布于 2014-08-19 22:41:18
启动SignalR连接时,它将检查$.connection.signalR.client对象,以查看是否添加了回调。如果在连接启动后使用常规赋值添加回调,SignalR将不会接收该回调。
若要在连接启动后添加回调,可以使用$.connection.signalR.client.on
$.connection.signalR.client.on("broadcastTotalOnline", function (totalOnlineUser) {
alert(totalOnlineUser);
});如果您试图在启动连接之前将回调添加到集线器,那么即使使用.on也无法工作。
在启动连接之前,必须至少有一个回调连接到计划使用的每个集线器上。您设置的回调可以是一个从未调用的虚拟回调。添加回调只是向SignalR表示您对源自该集线器的消息感兴趣的方式。
在您的情况下,您不需要添加任何虚拟回调,因为在启动连接之前已经附加到broadcastTotalOnline。
如果要删除回调,可以使用$.connection.signalR.client.off对先前添加的函数进行引用:
var callback = function (totalOnlineUser) {
alert(totalOnlineUser);
};
$.connection.signalR.client.on("broadcastTotalOnline", callback);
$.connection.signalR.client.off("broadcastTotalOnline", callback);https://stackoverflow.com/questions/25365084
复制相似问题