我希望在特定时间间隔后使用集线器将一些数据从服务器发送到所有连接的客户端。如何使用信号器集线器实现此目的。
答案 0 :(得分:4)
旋转System.Threading.Timer,然后从它的回调中使用特定的集线器广播该消息。
的Global.asax:
private Timer timer;
public class Global : System.Web.HttpApplication
{
protected void Application_Start(object sender, EventArgs e)
{
RouteTable.Routes.MapHubs("~/signalr2");
timer = new Timer(TimerCallback(timerCallback), null, Timeout.Infinite, 1000);
}
}
在SignalR wiki page中查看“从集线器外部通过集线器广播”部分。
答案 1 :(得分:2)
添加
Thread.Sleep(5000);
发送方法中的。
例如:
public void Send(string name, string message)
{
Thread.Sleep(5000);
//call the broadcast message to upadate the clients.
Clients.All.broadcastMessage(name, message);
}
希望它有所帮助。
修改强>
以下代码每5秒渲染一次当前时间。
这是脚本:
<script type="text/javascript">
$(function () {
$.connection.hub.logging = true;
$.connection.hub.start();
// Declare a proxy to reference the hub.
var chat = $.connection.chatHub;
//Appending the responce from the server to the discussion id
chat.client.currentTime = function (time) {
$('#discussion').append("<br/>" + time + "<br/>");
};
// Start the connection.
$.connection.hub.start().done(function () {
//Call the server side method for every 5 seconds
setInterval(function () {
var date = new Date();
chat.client.currentTime(date.toString());
}, 5000);
});
});
</script>
<div id="discussion"></div>
在HubClass上写下以下内容:
public class ChatHub: Hub
{
public void currentTime(string date)
{
Clients.All.broadCastTime(date);
}
}
答案 2 :(得分:1)
使用ReactiveExtensions,然后设置Observable.Interval来电。然后,被动将自动调用可以向您的客户广播的lambda。
答案 3 :(得分:0)
我偶然发现了Jason Roberts的这篇文章=&gt; http://dontcodetired.com/blog/post/Using-Server-Side-Timers-and-SignalR-in-ASPNET-MVC-Applications.aspx
他使用IRegisteredObject和HostingEnvironment.RegisterObject然后在完成工作的类中使用System.Threading.Timer,我自己没有尝试过,但它看起来确实是那种东西。