Share via


Scale-out di SignalR con Redis (SignalR 1.x)

di Patrick Fletcher

Avviso

Questa documentazione non è per la versione più recente di SignalR. Esaminare ASP.NET Core SignalR.

In questa esercitazione si userà Redis per distribuire i messaggi in un'applicazione SignalR distribuita in due istanze IIS separate.

Redis è un archivio chiave-valore in memoria. Supporta anche un sistema di messaggistica con un modello di pubblicazione/sottoscrizione. Il backplane SignalR Redis usa la funzionalità pub/sub per inoltrare messaggi ad altri server.

Diagramma che illustra la relazione tra Redis Server, che sottoscrive V Ms, computer, che quindi pubblica V Ms nei server Redis.

Per questa esercitazione si useranno tre server:

  • Due server che eseguono Windows, che verranno usati per distribuire un'applicazione SignalR.
  • Un server che esegue Linux, che verrà usato per eseguire Redis. Per gli screenshot di questa esercitazione, ho usato Ubuntu 12.04 TLS.

Se non si dispone di tre server fisici da usare, è possibile creare macchine virtuali in Hyper-V. Un'altra opzione consiste nel creare macchine virtuali in Azure.

Anche se questa esercitazione usa l'implementazione ufficiale di Redis, esiste anche una porta Windows di Redis di MSOpenTech. L'installazione e la configurazione sono diverse, ma in caso contrario i passaggi sono gli stessi.

Nota

La scalabilità orizzontale di SignalR con Redis non supporta i cluster Redis.

Panoramica

Prima di passare all'esercitazione dettagliata, ecco una rapida panoramica delle operazioni che verranno eseguite.

  1. Installare Redis e avviare il server Redis.

  2. Aggiungere questi pacchetti NuGet all'applicazione:

  3. Creare un'applicazione SignalR.

  4. Aggiungere il codice seguente a Global.asax per configurare il backplane:

    protected void Application_Start()
    {
        GlobalHost.DependencyResolver.UseRedis("server", port, "password", "AppName");
    
        RouteTable.Routes.MapHubs();
        // ...
    }
    

Ubuntu in Hyper-V

Con Windows Hyper-V è possibile creare facilmente una macchina virtuale Ubuntu in Windows Server.

Scaricare l'ISO Ubuntu da http://www.ubuntu.com.

In Hyper-V aggiungere una nuova macchina virtuale. Nel passaggio Connetti disco rigido virtuale selezionare Crea un disco rigido virtuale.

Screenshot della Creazione guidata nuova macchina virtuale che mostra il riquadro Connetti disco rigido virtuale e il campo Nome evidenziato.

Nel passaggio Opzioni di installazione selezionare File di immagine (con estensione iso), fare clic su Sfoglia e passare all'ISO di installazione di Ubuntu.

Screenshot della Creazione guidata nuova macchina virtuale con il riquadro Opzioni di installazione e l'opzione File immagine evidenziata.

Installare Redis

Seguire la procedura in http://redis.io/download per scaricare e compilare Redis.

wget http://redis.googlecode.com/files/redis-2.6.12.tar.gz
tar xzf redis-2.6.12.tar.gz
cd redis-2.6.12
make

In questo modo vengono compilati i file binari Redis nella src directory .

Per impostazione predefinita, Redis non richiede una password. Per impostare una password, modificare il redis.conf file, che si trova nella directory radice del codice sorgente. (Crea una copia di backup del file prima di modificarlo!) Aggiungere la direttiva seguente a redis.conf:

requirepass YourStrongPassword1234

Avviare ora il server Redis:

src/redis-server redis.conf

Screenshot della finestra del server Redis utente di Azure, che mostra le informazioni sul server, tra cui l'avvio del server e lo stato della memoria.

Aprire la porta 6379, ovvero la porta predefinita su cui Redis è in ascolto. È possibile modificare il numero di porta nel file di configurazione.

Creare l'applicazione SignalR

Creare un'applicazione SignalR seguendo una di queste esercitazioni:

Successivamente, l'applicazione di chat verrà modificata per supportare la scalabilità orizzontale con Redis. Aggiungere prima di tutto il pacchetto NuGet SignalR.Redis al progetto. In Visual Studio scegliere Gestione pacchetti NuGet dal menu Strumenti e quindi console di Gestione pacchetti. Nella finestra Console di gestione pacchetti immettere il comando seguente:

Install-Package Microsoft.AspNet.SignalR.Redis

Aprire quindi il file Global.asax. Aggiungere il codice seguente al metodo Application_Start :

protected void Application_Start()
{
    GlobalHost.DependencyResolver.UseRedis("server", port, "password", "AppName");

    RouteTable.Routes.MapHubs();
}
  • "server" è il nome del server che esegue Redis.
  • port è il numero di porta
  • "password" è la password definita nel file redis.conf.
  • "AppName" è qualsiasi stringa. SignalR crea un canale pub/sub Redis con questo nome.

Ad esempio:

GlobalHost.DependencyResolver.UseRedis("redis-server.cloudapp.net", 6379,
    "MyStrongPassword1234", "ChatApp");

Distribuire ed eseguire l'applicazione

Preparare le istanze di Windows Server per distribuire l'applicazione SignalR.

Aggiungere il ruolo IIS. Includere le funzionalità "Sviluppo di applicazioni", incluso il protocollo WebSocket.

Screenshot dell'Aggiunta guidata ruoli e funzionalità con le opzioni Ruoli server e Protocollo Web Socket evidenziate.

Includere anche il servizio di gestione (elencato in "Strumenti di gestione").

Screenshot dell'Aggiunta guidata ruoli e funzionalità con le opzioni Ruoli del server e I S Management Scripts and Tools evidenziate.

Installare Distribuzione Web 3.0. Quando si esegue Gestione IIS, verrà richiesto di installare Piattaforma Web Microsoft oppure scaricare il programma di installazione. Nel programma di installazione della piattaforma cercare Distribuzione Web e installare Distribuzione Web 3.0

Screenshot della schermata dei risultati della ricerca di Web Platform Installer 4 punto 5 con l'opzione Distribuzione Web 3 punti 0 evidenziata.

Verificare che il servizio di gestione Web sia in esecuzione. In caso contrario, avviare il servizio. Se il servizio gestione Web non è presente nell'elenco dei servizi Windows, assicurarsi di aver installato il servizio di gestione quando è stato aggiunto il ruolo IIS.

Per impostazione predefinita, il servizio di gestione Web è in ascolto sulla porta TCP 8172. In Windows Firewall creare una nuova regola in ingresso per consentire il traffico TCP sulla porta 8172. Per altre informazioni, vedere Configurazione delle regole del firewall. Se si ospitano le macchine virtuali in Azure, è possibile farlo direttamente nel portale di Azure. Vedere Come configurare gli endpoint in una macchina virtuale.

A questo momento è possibile distribuire il progetto di Visual Studio dal computer di sviluppo al server. In Esplora soluzioni fare clic con il pulsante destro del mouse sulla soluzione e scegliere Pubblica.

Per una documentazione più dettagliata sulla distribuzione Web, vedere Web Deployment Content Map for Visual Studio e ASP.NET.

Se si distribuisce l'applicazione in due server, è possibile aprire ogni istanza in una finestra del browser separata e verificare che ognuno riceva messaggi SignalR dall'altro. Naturalmente, in un ambiente di produzione, i due server si trovano dietro un servizio di bilanciamento del carico.

Screenshot dei messaggi Signal R visualizzati in un Web browser Internet Explorer, che visualizza la schermata Indice.

Se si è curiosi di visualizzare i messaggi inviati a Redis, è possibile usare il client redis-cli , che viene installato con Redis.

redis-cli -a password
SUBSCRIBE ChatApp

Screenshot della schermata di output dell'utente di Azure, che visualizza le informazioni per tutti i messaggi inviati e il codice accompagnato.