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:
- Installare Visual Studio
- Installare Node.js
- Installare Python versione 2.7.10
Creazione di un progetto di servizio cloud
Eseguire le operazioni seguenti per creare il progetto servizio cloud che ospiterà l'applicazione Socket.IO.
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.
Creare una directory denominata c:\node.
PS C:\> md node
Passare alla directory c:\node.
PS C:\> cd node
Immettere i comandi seguenti per creare una nuova soluzione denominata
chatapp
e un ruolo di lavoro denominatoWorkerRole1
:PS C:\node> New-AzureServiceProject chatapp PS C:\Node> Add-AzureNodeWorkerRole
Verrà visualizzata la risposta seguente:
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.
Creare una copia locale dell'archivio usando il pulsante Clone . È inoltre possibile usare il pulsante ZIP per scaricare il progetto.
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.
Gli elementi evidenziati nello screenshot precedente sono i file copiati dalla directory examples\chat.
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:
Aprire il file server. js in Visual Studio o qualsiasi altro editor di testo.
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
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:
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:
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
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.
Aprire un browser e passare a
http://127.0.0.1
.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.
Dopo aver testato l'applicazione, immettere il comando seguente per interrompere l'emulatore:
PS C:\node\chatapp\WorkerRole1> Stop-AzureEmulator
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.