3

特定の間隔の後に、ハブを使用してサーバーから接続されているすべてのクライアントにデータを送信したいと思います。Signalrハブを使用してこれを実現するにはどうすればよいですか。

4

4 に答える 4

5

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);
    }
}

SignalRwikiページの「ハブの外部からのハブを介したブロードキャスト」セクションを確認してください。

于 2013-03-19T10:57:18.927 に答える
1

ReactiveExtensionsを使用してから、 Observable.Interval呼び出しを設定します。次に、reactiveは、クライアントにブロードキャストできるラムダを自動的に呼び出します。

于 2013-03-19T13:55:58.593 に答える
1

JasonRobertsによるこの投稿に出くわしました=> http://dontcodetired.com/blog/post/Using-Server-Side-Timers-and-SignalR-in-ASPNET-MVC-Applications.aspx

彼は、IRegisteredObjectとHostingEnvironment.RegisterObjectを使用してから、作業を行うクラスでSystem.Threading.Timerを使用します。私自身は試していませんが、まさにそのようなものに見えます。

于 2014-12-05T09:07:27.230 に答える
-3

追加するだけ

Thread.Sleep(5000);

sendメソッドで。

元:

    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);
        }
   }
于 2013-03-19T10:43:53.123 に答える