Creare un'applicazione di chat Node.js con Socket.IO in un servizio cloud di Azure (versione classica)

Suggerimento

Socket.IO è ora supportato in modo nativo in Azure. Aumentare il numero di istanze di un'app Socket.IO per gestire migliaia di connessioni è spesso frustrante. Ora che Azure supporta in modo nativo Socket.IO, è possibile delegare ad Azure la gestione di scalabilità e disponibilità. Altre informazioni su come eseguire qualsiasi app Socket.IO in Azure con poche righe di codice.

Importante

Servizi cloud (versione classica) è ora deprecato per i nuovi clienti e verrà ritirato il 31 agosto 2024 per tutti i clienti. Le nuove distribuzioni devono usare il nuovo modello di distribuzione basato su Azure Resource Manager, Servizi cloud di Azure (supporto "Extended").

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 socket.io.

Di seguito è riportata una schermata dell'applicazione completata:

![Finestra del browser con il servizio ospitato in Azure][completed-app]

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.

    Azure PowerShell icon

  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:

    The output of the new-azureservice and add-azurenodeworkerrolecmdlets

Download dell'esempio di chat

Per questo progetto, verrà usato l'esempio di chat dal [repository 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.

    A browser window viewing https://github.com/LearnBoost/socket.io/tree/master/examples/chat, with the ZIP download icon highlighted

  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.

    Explorer, displaying the contents of the examples\chat directory extracted from the archive

    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:

    The output of the npm install command

  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, assicurandosi 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.

    Two browser windows displaying chat messages from User1 and 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][completed-app]

    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.