2011-11-16 14 views
5

ローカルのチャットなど、いくつかのSignalRの基本的なデモがあり、サーバーに接続して接続されているすべてのクライアントにブロードキャストさせることがわかっています。ASP.NET C#SignalR Stream to Client

私の質問は、SignalRを使ってデータをクライアントに「ストリーム」する方法です。例えば、TwittersストリーミングAPIを利用したNodeJS/Socket.IOの例を見てください。

SignalRストリーミングの例はありますか?これはどのように機能しますか?

答えて

10

SignalR.Samplesプロジェクトのサンプルを見てください。そこにストリーミングサンプルがあります。

サーバ側接続:ストリームを生成

namespace SignalR.Samples.Streaming 
{ 
    public class Streaming : PersistentConnection 
    { 
    } 
} 

コード

ThreadPool.QueueUserWorkItem(_ => 
{ 
    var connection = Connection.GetConnection<Streaming.Streaming>(); 
    while (true) 
    { 
     connection.Broadcast(DateTime.Now.ToString()); 
     Thread.Sleep(2000); 
    } 
}); 

クライアント側のコード

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <title></title> 
    <meta http-equiv="X-UA-Compatible" content="IE=Edge" /> 
    <script src="../Scripts/jquery-1.6.2.min.js" type="text/javascript"></script> 
    <script src="../Scripts/jquery.signalR.js" type="text/javascript"></script> 
    <script type="text/javascript"> 
     $(function() { 
      var connection = $.connection('Streaming.ashx'); 

      connection.received(function (data) { 
       $('#messages').append('<li>' + data + '</li>'); 
      }); 

      connection.start(); 
     }); 
    </script> 
</head> 
<body> 
    <ul id="messages"> 
    </ul> 
</body> 
</html> 
+0

あなたはすべてのクライアントにブロードキャストしている場合、これはokです。しかし、バックグラウンド作業の結果を特定のクライアントにプッシュしたいのであればどうでしょうか?それは私の現在のシナリオです...ありがとうございます。 –

+1

どこかに格納された接続IDのリストを保持し、特定のクライアントに送信します。 – davidfowl

1

旧式の方法でHTTP経由でダウンロードを開始するようにSignalRを使用するのはなぜですか?または、.NETの観点から、別の方法でStreamを使用していますか?

外部イベントのブロードキャストを意味するだけの場合、クライアントの1つが、興味深いデータイベントを中継するために送信している他のサービスになることはできません。