我需要实时向客户端发送字符串,但我的代码只能用于睡眠。 如果我减少睡眠参数,则会错过一些呼叫。 我的集线器类是空的,因为我不需要客户端到服务器的调用。 这是我的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);
}
}
答案 0 :(得分: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)(假设您实际上并不需要它)并且您和#39;能够完美地向客户广播。
修改强>
根据您的评论,可能是您实际上开了很多线程。根据您运行的线程数量,您可能需要增加每个域的并发客户端连接数。默认值为2。见http://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.defaultconnectionlimit.aspx