0

我需要实时向客户发送字符串,但我的代码只适用于睡眠。如果我减少睡眠参数,则会错过一些呼叫。我的中心类是空的,因为我不需要客户端到服务器的调用。这是我的aspx文件:客户端(aspx):

var myhub = $.connection.chatHub;
myhub.client.broadcastMessage = function (message) {
    $('#container').append(message);
};
$.connection.hub.start();

服务器(c#):

protected void Button1_Click(object sender, EventArgs e)
{            
    Thread t = new Thread(novaThread);
    t.Start();
}

static void novaThread() {
    var hubContext = GlobalHost.ConnectionManager.GetHubContext<ChatHub>();
    for (int i = 0; i < 20; i++)
    {
        hubContext.Clients.All.broadcastMessage("Server datetime: " + DateTime.Now.ToString());
        Thread.Sleep(1000);
    }   
}
4

1 回答 1

1

如果您想在服务器上调用客户端方法,您仍然需要集线器。枢纽是使这种联系永久化的原因。听起来你需要一些重命名。

var myhub = $.connection.chatHub;
myhub.client.broadcastMessage = function (message) {
        $('#container').append(message);
};

$.connection.hub.start();

如果您在服务器上调用 ChatHub,那么 testHub 绝对没有任何意义。结果,我更新了你的 javascript 来调用 chatHub,而不是你正在做的 testHub。通过简单地确保您在客户端中创建了一个 chatHub 实例,您应该能够摆脱 Thread.Sleep(1000) (假设您实际上并不需要它)并且您将能够完美地向客户端广播。

编辑:

根据您的评论,可能是您实际上启动了太多线程。根据您正在运行的线程数,您可能需要提高每个域的并发客户端连接数。默认值为两个。请参阅http://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.defaultconnectionlimit.aspx

于 2013-11-07T15:02:39.590 回答