2011-11-16 27 views
5

Tengo un par de demostraciones básicas de SignalR que funcionan localmente (chat, etc.) y entiendo cómo presionar al servidor para que se transmita a todos los clientes conectados.ASP.NET C# SignalR Stream para el cliente

Mi pregunta es cómo podría utilizar SignalR para "transmitir" datos al cliente. Por ejemplo, ejemplos vistos en NodeJS/Socket.IO utilizando Twitters streaming API.

¿Hay algún ejemplo de transmisión de señal de luz por ahí? ¿Cómo podría funcionar esto?

Respuesta

10

Eche un vistazo a las muestras en el proyecto SignalR.Samples. Hay una muestra de transmisión allí. conexión del lado

Servidor:

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

El código que genera el flujo de

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

Código del lado del cliente

<!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

Esto está bien si usted está transmitiendo a todos los clientes. Pero, ¿y si quisieras presionar a clientes específicos como resultado de un trabajo de fondo? Esa es mi situación actual ... Gracias. –

+1

Mantenga una lista de identificadores de conexión almacenados en algún lugar y envíelos a clientes específicos. – davidfowl

1

¿Por qué no simplemente usar SignalR para decirle al cliente que comience una descarga a través de HTTP a la manera antigua? ¿O está usando Stream de una manera diferente en términos de .NET?

Si solo quiere decir transmitir eventos externos, no hay nada que diga que uno de los clientes no puede ser otro servicio que está enviando eventos de datos interesantes para retransmitir.