Scale-out di SignalR con RedisSignalR Scaleout with Redis

da Mike Wassonby Mike Wasson

Note

Questo articolo si riferisce a ASP.NET SignalR.This article refers to ASP.NET SignalR. Se si sta valutando l'uso di SignalR per abilitare scenari in tempo reale con Java, Node. js, o in uno scenario senza server, dare un'occhiata ASP.NET Core SignalR.If you're thinking about using SignalR to enable real-time scenarios with Java, Node.js, or in a serverless scenario, take a look at ASP.NET Core SignalR. Se è già stato usato ASP.NET SignalR, esaminiamo il differenze tra le versioni pagina per comprendere le differenze nelle versioni e i miglioramenti di ASP.NET Core SignalR.If you've already used ASP.NET SignalR, take a look at the version differences page to understand the differences in the versions and the improvements in ASP.NET Core SignalR. Infine, se si conosce a cui verrà eseguita l'App in tempo reale in Microsoft Azure, esaminiamo il servizio Azure SignalR, offrendo scalabilità basata sul cloud dopo che l'App necessaria.Finally, if you know you'll be running your real-time apps in Microsoft Azure, take a look at the Azure SignalR Service, as it provides cloud-based scale-out once your apps need it.

Versioni del software utilizzate in questo argomentoSoftware versions used in this topic

Versioni precedenti di questo argomentoPrevious versions of this topic

Per informazioni sulle versioni precedenti di SignalR, vedere le versioni precedenti di SignalR.For information about earlier versions of SignalR, see SignalR Older Versions.

Domande e commentiQuestions and comments

Inviaci un feedback sul modo in cui è stato apprezzato questa esercitazione e cosa possiamo migliorare nei commenti nella parte inferiore della pagina.Please leave feedback on how you liked this tutorial and what we could improve in the comments at the bottom of the page. Se hai domande che non sono direttamente correlate con l'esercitazione, è possibile pubblicarli per i forum ASP.NET SignalR oppure StackOverflow.com.If you have questions that are not directly related to the tutorial, you can post them to the ASP.NET SignalR forum or StackOverflow.com.

In questa esercitazione si userà Redis distribuire i messaggi in un'applicazione di SignalR che viene distribuita in due istanze separate di IIS.In this tutorial, you will use Redis to distribute messages across a SignalR application that is deployed on two separate IIS instances.

Redis è un archivio chiave-valore in memoria.Redis is an in-memory key-value store. Supporta inoltre un sistema di messaggistica con un modello publish/subscribe.It also supports a messaging system with a publish/subscribe model. Backplane SignalR Redis Usa la funzionalità di pubblicazione/sottoscrizione per inoltrare i messaggi ad altri server.The SignalR Redis backplane uses the pub/sub feature to forward messages to other servers.

Per questa esercitazione si userà tre server:For this tutorial, you will use three servers:

  • Due server che eseguono Windows, che verrà usato per distribuire un'applicazione di SignalR.Two servers running Windows, which you will use to deploy a SignalR application.
  • Un server che esegue Linux, che verrà usato per l'esecuzione di Redis.One server running Linux, which you will use to run Redis. Per le schermate contenute in questa esercitazione, ho utilizzato Ubuntu 12.04 TLS.For the screenshots in this tutorial, I used Ubuntu 12.04 TLS.

Se non si dispone di tre server fisici da usare, è possibile creare macchine virtuali in Hyper-V.If you don't have three physical servers to use, you can create VMs on Hyper-V. Un'altra opzione consiste nel creare le macchine virtuali in Azure.Another option is to create VMs on Azure.

Anche se in questa esercitazione Usa l'implementazione di Redis ufficiale, è inoltre disponibile un' porte Windows di Redis da MSOpenTech.Although this tutorial uses the official Redis implementation, there is also a Windows port of Redis from MSOpenTech. Il programma di installazione e configurazione sono diversi, ma in caso contrario, i passaggi sono uguali.Setup and configuration are different, but otherwise the steps are the same.

Note

Scalabilità orizzontale di SignalR con Redis non supporta i cluster Redis.SignalR scaleout with Redis does not support Redis clusters.

PanoramicaOverview

Prima di passare all'esercitazione dettagliata, ecco una rapida panoramica delle azioni da eseguire.Before we get to the detailed tutorial, here is a quick overview of what you will do.

  1. Installare Redis e avviare il server Redis.Install Redis and start the Redis server.

  2. Aggiungere i pacchetti NuGet per l'applicazione:Add these NuGet packages to your application:

  3. Creare un'applicazione di SignalR.Create a SignalR application.

  4. Aggiungere il codice seguente per configurare backplane Startup.cs:Add the following code to Startup.cs to configure the backplane:

    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            // Any connection or hub wire up and configuration should go here
            GlobalHost.DependencyResolver.UseStackExchangeRedis("server", port, "password", "AppName");
            app.MapSignalR();
        }
    }
    

Ubuntu in Hyper-VUbuntu on Hyper-V

Con Windows Hyper-V, è possibile creare facilmente una VM Ubuntu in Windows Server.Using Windows Hyper-V, you can easily create an Ubuntu VM on Windows Server.

Scaricare il file ISO di Ubuntu dalla http://www.ubuntu.com .Download the Ubuntu ISO from http://www.ubuntu.com.

In Hyper-V, aggiungere una nuova macchina virtuale.In Hyper-V, add a new VM. Nel connessione disco rigido virtuale passaggio, seleziona creare un disco rigido virtuale.In the Connect Virtual Hard Disk step, select Create a virtual hard disk.

Nel opzioni di installazione passaggio, seleziona file di immagine (con estensione ISO), fare clic su Sfogliae individuare l'ISO di installazione di Ubuntu.In the Installation Options step, select Image file (.iso), click Browse, and browse to the Ubuntu installation ISO.

Installare RedisInstall Redis

Seguire i passaggi descritti in http://redis.io/download per scaricare e compilare Redis.Follow the steps at http://redis.io/download to download and build 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

Verranno compilati i file binari di Redis src directory.This builds the Redis binaries in the src directory.

Per impostazione predefinita, Redis non richiede una password.By default, Redis does not require a password. Per impostare una password, modificare il redis.conf file che si trova nella directory radice del codice sorgente.To set a password, edit the redis.conf file, which is located in the root directory of the source code. (Eseguire una copia di backup del file prima di modificarlo!) Aggiungere la seguente direttiva a redis.conf:(Make a backup copy of the file before you edit it!) Add the following directive to redis.conf:

requirepass YourStrongPassword1234

Ora avviare il server Redis:Now start the Redis server:

src/redis-server redis.conf

Aprire la porta 6379, ovvero la porta predefinita che Redis è in ascolto su.Open port 6379, which is the default port that Redis listens on. (È possibile modificare il numero di porta nel file di configurazione).(You can change the port number in the configuration file.)

Creare l'applicazione di SignalRCreate the SignalR Application

Creare un'applicazione di SignalR seguendo una di queste esercitazioni:Create a SignalR application by following either of these tutorials:

Successivamente, modifichiamo l'applicazione di chat per supportare scalabilità orizzontale con Redis.Next, we'll modify the chat application to support scaleout with Redis. In primo luogo, aggiungere il Microsoft.AspNet.SignalR.StackExchangeRedis pacchetto NuGet al progetto.First, add the Microsoft.AspNet.SignalR.StackExchangeRedis NuGet package to your project. In Visual Studio dal degli strumenti dal menu Gestione pacchetti NuGet, quindi selezionare Package Manager Console.In Visual Studio, from the Tools menu, select NuGet Package Manager, then select Package Manager Console. Nella finestra della Console di gestione pacchetti immettere il comando seguente:In the Package Manager Console window, enter the following command:

Install-Package Microsoft.AspNet.SignalR.StackExchangeRedis

Successivamente, aprire il file Startup.cs.Next, open the Startup.cs file. Aggiungere il codice seguente per il configurazione metodo:Add the following code to the Configuration method:

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        // Any connection or hub wire up and configuration should go here
        GlobalHost.DependencyResolver.UseStackExchangeRedis("server", port, "password", "AppName");
        app.MapSignalR();
    }
}
  • "server" è il nome del server Redis in esecuzione."server" is the name of the server that is running Redis.
  • porta è il numero di portaport is the port number
  • "password" è la password che è definito nel file conf."password" is the password that you defined in the redis.conf file.
  • "AppName" è qualsiasi stringa."AppName" is any string. SignalR crea un canale di Redis pub/sub con questo nome.SignalR creates a Redis pub/sub channel with this name.

Ad esempio:For example:

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

Distribuire ed eseguire l'applicazioneDeploy and Run the Application

Preparare le istanze di Windows Server per distribuire l'applicazione di SignalR.Prepare your Windows Server instances to deploy the SignalR application.

Aggiungere il ruolo IIS.Add the IIS role. Include funzionalità di "Sviluppo di applicazioni", tra cui il protocollo WebSocket.Include "Application Development" features, including the WebSocket Protocol.

Includere anche il servizio di gestione (elencati in "Strumenti di gestione").Also include the Management Service (listed under "Management Tools").

Installare Web Deploy 3.0.Install Web Deploy 3.0. Quando si esegue Gestione IIS, verrà richiesto di installare piattaforma Web Microsoft oppure è possibile scaricare il programma di installazione.When you run IIS Manager, it will prompt you to install Microsoft Web Platform, or you can download the installer. Nel programma di installazione della piattaforma, eseguire la ricerca di Web Deploy e installare distribuzione Web 3.0In the Platform Installer, search for Web Deploy and install Web Deploy 3.0

Verificare che il servizio di gestione Web sia in esecuzione.Check that the Web Management Service is running. In caso contrario, avviare il servizio.If not, start the service. (Se il servizio di gestione Web non viene visualizzata nell'elenco dei servizi di Windows, assicurarsi che il servizio di gestione installato quando è stato aggiunto il ruolo IIS.)(If you don't see Web Management Service in the list of Windows services, make sure that you installed the Management Service when you added the IIS role.)

Per impostazione predefinita, il servizio di gestione Web è in ascolto sulla porta TCP 8172.By default, the Web Management Service listens on TCP port 8172. In Windows Firewall, creare una nuova regola in ingresso per consentire il traffico TCP sulla porta 8172.In Windows Firewall, create a new inbound rule to allow TCP traffic on port 8172. Per altre informazioni, vedere configurare le regole del Firewall.For more information, see Configuring Firewall Rules. (Se si ospita le macchine virtuali in Azure, è possibile farlo direttamente nel portale di Azure.(If you are hosting the VMs on Azure, you can do this directly in the Azure portal. Visualizzare come configurare gli endpoint a una macchina virtuale.)See How to Set Up Endpoints to a Virtual Machine.)

A questo punto si è pronti per distribuire il progetto di Visual Studio dal computer di sviluppo al server.Now you are ready to deploy the Visual Studio project from your development machine to the server. In Esplora soluzioni fare doppio clic la soluzione e fare clic su pubblica.In Solution Explorer, right-click the solution and click Publish.

Per informazioni dettagliate documentazione sulla distribuzione web, vedere mappa del contenuto di distribuzione Web per Visual Studio e ASP.NET.For more detailed documentation about web deployment, see Web Deployment Content Map for Visual Studio and ASP.NET.

Se si distribuisce l'applicazione a due server, è possibile aprire ogni istanza in una finestra distinta del browser e vedere che possano ricevere i messaggi SignalR da un altro.If you deploy the application to two servers, you can open each instance in a separate browser window and see that they each receive SignalR messages from the other. (Naturalmente, in un ambiente di produzione, i due server sarebbe si trovano dietro un bilanciamento del carico.)(Of course, in a production environment, the two servers would sit behind a load balancer.)

Se si è interessati a visualizzare i messaggi che vengono inviate a Redis, è possibile usare la redis-cli client, che viene installato con Redis.If you're curious to see the messages that are sent to Redis, you can use the redis-cli client, which installs with Redis.

redis-cli -a password
SUBSCRIBE ChatApp