Creazione di un'applicazione di chat Node.js con Socket.IO in un servizio cloud di Azure

Socket.IO fornisce comunicazioni in tempo reale tra il server node.js e i client. In questa esercitazione verrà illustrato l'hosting di un'applicazione di chat basata su socket.IO in Azure. Per altre informazioni su Socket.IO, vedere http://socket.io/.

Di seguito è riportata una schermata dell'applicazione completata:

Finestra del browser con il servizio ospitato in Azure

Prerequisiti

Assicurarsi che i seguenti prodotti e versioni siano installati per completare correttamente l'esempio in questo articolo:

Creazione di un progetto di servizio cloud

Eseguire le operazioni seguenti per creare il progetto servizio cloud che ospiterà l'applicazione Socket.IO.

  1. Nel menu Start o nella schermata Start cercare Windows PowerShell. Fare infine clic con il pulsante destro del mouse su Windows PowerShell e scegliere Esegui come amministratore.

    Icona di Azure PowerShell

  2. Creare una directory denominata c:\node.

     PS C:\> md node
    
  3. Passare alla directory c:\node.

     PS C:\> cd node
    
  4. Immettere i comandi seguenti per creare una nuova soluzione denominata chatapp e un ruolo di lavoro denominato WorkerRole1:

     PS C:\node> New-AzureServiceProject chatapp
     PS C:\Node> Add-AzureNodeWorkerRole
    

    Verrà visualizzata la risposta seguente:

    Output dei cmdlet new-azureservice e add-azurenodeworkerrole

Download dell'esempio di chat

Per questo progetto, verrà usato l'esempio di chat dell' archivio GitHub Socket.IO. Eseguire la procedura seguente per scaricare l'esempio e aggiungerlo al progetto creato in precedenza.

  1. Creare una copia locale dell'archivio usando il pulsante Clone . È inoltre possibile usare il pulsante ZIP per scaricare il progetto.

    Finestra del browser con https://github.com/LearnBoost/socket.io/tree/master/examples/chat e l'icona per il download di ZIP evidenziata

  2. Spostarsi nella struttura di directory del repository locale fino alla directory examples\chat. Copiare il contenuto di questa directory nella directory C:\node\chatapp\WorkerRole1 creata in precedenza.

    Esplora risorse con il contenuto della directory examples\chat estratto dall'archivio

    Gli elementi evidenziati nello screenshot precedente sono i file copiati dalla directory examples\chat.

  3. Nella directory C:\node\chatapp\WorkerRole1 eliminare il file server.js e quindi rinominare il file app.js in server.js. Il file server.js predefinito creato in precedenza dal cmdlet Add-AzureNodeWorkerRole verrà così rimosso e sostituito con il file dell'applicazione dell'esempio di chat.

Modificare Server.js e installare i moduli

Prima di testare l'applicazione nell'emulatore di Azure, è necessario apportare alcune piccole modifiche. Eseguire la procedura seguente per il file server.js:

  1. Aprire il file server. js in Visual Studio o qualsiasi altro editor di testo.
  2. Trovare la sezione Module dependencies all'inizio del file server.js e sostituire la riga contenente sio = require('..//..//lib//socket.io') con sio = require('socket.io'), come illustrato di seguito:

    var express = require('express')
      , stylus = require('stylus')
      , nib = require('nib')
    //, sio = require('..//..//lib//socket.io'); //Original
      , sio = require('socket.io');                //Updated
      var port = process.env.PORT || 3000;         //Updated
    
  3. Per assicurarsi che l'applicazione resti in ascolto sulla porta corretta, aprire il file server.js nel Blocco note o in un altro editor di testo e quindi modificare la riga seguente sostituendo 3000 con process.env.port, come illustrato di seguito:

    //app.listen(3000, function () {            //Original
    app.listen(process.env.port, function () {  //Updated
      var addr = app.address();
      console.log('   app listening on http://' + addr.address + ':' + addr.port);
    });
    

Dopo aver salvato le modifiche apportate al file server.js, eseguire la procedura seguente per installare i moduli necessari, quindi testare l'applicazione nell'emulatore di Azure:

  1. Con Azure PowerShell passare alla directory C:\node\chatapp\WorkerRole1 e usare il comando seguente per installare i moduli necessari per l'applicazione:

    PS C:\node\chatapp\WorkerRole1> npm install
    

    Verranno installati i moduli elencati nel file package.json. Dopo il completamento del comando, l'output dovrebbe essere simile al seguente:

    Output del comando npm install

  2. Poiché l'esempio in origine faceva parte dell'archivio GitHub Socket.IO e faceva riferimento direttamente alla libreria Socket.IO mediante percorso relativo, a Socket.IO non viene fatto riferimento nel file package.json, quindi è necessario installarlo immettendo il comando seguente:

    PS C:\node\chatapp\WorkerRole1> npm install socket.io --save
    

Test e distribuzione

  1. Avviare l'emulatore immettendo il comando seguente:

    PS C:\node\chatapp\WorkerRole1> Start-AzureEmulator -Launch
    
    Nota

    Se si verificano problemi con l'avvio dell'emulatore, ad esempio Start-AzureEmulator: Errore imprevisto. Dettagli: Errore imprevisto Impossibile utilizzare l'oggetto di comunicazione, System.ServiceModel.Channels.ServiceChannel per la comunicazione perché è nello stato Faulted.

    reinstallare AzureAuthoringTools 2.7.1 e AzureComputeEmulator 2.7 - verificare che la versione corrisponda. > >

  2. Aprire un browser e passare a http://127.0.0.1.

  3. Quando si apre la finestra del browser, immettere un nome alternativo e premere INVIO. In questo modo sarà possibile inviare messaggi con un nome alternativo specifico. Per testare la funzionalità multiutente, aprire altre finestre del browser usando lo stesso URL e immettere nomi alternativi diversi.

    Due finestre del browser con i messaggi della chat di User1 e User2

  4. Dopo aver testato l'applicazione, immettere il comando seguente per interrompere l'emulatore:

    PS C:\node\chatapp\WorkerRole1> Stop-AzureEmulator
    
  5. Per distribuire l'applicazione in Azure, usare il cmdlet Publish-AzureServiceProject. Ad esempio:

    PS C:\node\chatapp\WorkerRole1> Publish-AzureServiceProject -ServiceName mychatapp -Location "East US" -Launch
    
    Importante

    Assicurarsi di usare un nome univoco, in caso contrario il processo di pubblicazione avrà esito negativo. Al termine della distribuzione, verrà visualizzata una finestra del browser che consente di passare al servizio distribuito.

    Se viene visualizzato un messaggio di errore indicante che il nome della sottoscrizione specificato non esiste nel profilo di pubblicazione importato, è necessario scaricare e importare il profilo di pubblicazione per la sottoscrizione prima della distribuzione in Azure. Vedere la sezione Distribuzione dell'applicazione in Azure dell'argomento Creazione e distribuzione di un'applicazione Node.js in un servizio cloud di Azure

    Finestra del browser con il servizio ospitato in Azure

    Nota

    Se viene visualizzato un messaggio di errore indicante che il nome della sottoscrizione specificato non esiste nel profilo di pubblicazione importato, è necessario scaricare e importare il profilo di pubblicazione per la sottoscrizione prima della distribuzione in Azure. Vedere la sezione Distribuzione dell'applicazione in Azure dell'argomento Creazione e distribuzione di un'applicazione Node.js in un servizio cloud di Azure

L'applicazione è ora in esecuzione in Azure ed è in grado di inoltrare i messaggi di chat tra diversi client tramite Socket.IO.

Nota

Per semplicità, in questo esempio viene illustrata solo la chat tra utenti connessi alla stessa istanza. Questo significa che se il servizio cloud crea due istanze del ruolo di lavoro, gli utenti saranno in grado di comunicare solo con altri connessi alla stessa istanza. Per scalare l'applicazione in modo da usare più istanze del ruolo, è possibile usare una tecnologia come il bus di servizio per condividere lo stato dell'archivio Socket.IO tra le istanze. Per alcuni esempi, vedere le apposite sezioni relative a code e argomenti del bus di servizio nel repository GitHub di Azure SDK per Node.js.

Passaggi successivi

In questa esercitazione è stato illustrato come creare un'applicazione di chat di base ospitata in un servizio cloud di Azure. Per informazioni su come ospitare questa applicazione in un sito Web di Azure, vedere Creazione di un'applicazione di chat Node.js con Socket.IO in un sito Web di Azure.

Per ulteriori informazioni, vedere anche il Centro per sviluppatori di Node.js.