Skapa ett Node.js chattprogram med Socket.IO på en Azure Cloud Service (klassisk)
Tips
Socket.IO stöds nu internt i Azure. Om du vill skala ut en Socket.IO app för att hantera tusentals anslutningar är det ofta frustrerande. Nu när Azure har inbyggt stöd för Socket.IO kan du låta Azure hantera skalbarhet och tillgänglighet. Läs mer om hur du kan få en Socket.IO app att köras i Azure med några rader kod.
Viktigt
Cloud Services (klassisk) är nu inaktuell för nya kunder och kommer att dras tillbaka den 31 augusti 2024 för alla kunder. Nya distributioner bör använda den nya Azure Resource Manager-baserade distributionsmodellen Azure Cloud Services (utökad support).
Socket.IO tillhandahåller realtidskommunikation mellan din Node.js-server och klienter. Den här självstudien vägleder dig genom att vara värd för en socket. I/O-baserat chattprogram i Azure. Mer information om Socket.IO finns i socket.io.
En skärmbild av det färdiga programmet finns nedan:
! [Ett webbläsarfönster som visar tjänsten som finns i Azure] [completed-app]
Förutsättningar
Kontrollera att följande produkter och versioner har installerats för att slutföra exemplet i den här artikeln:
- Installera Visual Studio
- Installera Node.js
- Installera Python version 2.7.10
Skapa ett molntjänstprojekt
Följande steg skapar molntjänstprojektet som ska vara värd för Socket.IO-programmet.
Från Start-menyn eller Startskärmen söker du efter Windows PowerShell. Högerklicka slutligen på Windows PowerShell och välj Kör som administratör.
Skapa en katalog med namnet c:\node.
PS C:\> md node
Ändra kataloger till katalogen c:\node
PS C:\> cd node
Ange följande kommandon för att skapa en ny lösning med namnet
chatapp
och en arbetsroll med namnetWorkerRole1
:PS C:\node> New-AzureServiceProject chatapp PS C:\Node> Add-AzureNodeWorkerRole
Du ser följande svar:
Ladda ned chattexemplet
För det här projektet använder vi chattexemplet från [Socket.IO GitHub-lagringsplats]. Utför följande steg för att ladda ned exemplet och lägga till det i projektet som du skapade tidigare.
Skapa en lokal kopia av lagringsplatsen med knappen Klona . Du kan också använda ZIP-knappen för att ladda ned projektet.
Navigera i katalogstrukturen för den lokala lagringsplatsen tills du kommer till katalogen examples\chat . Kopiera innehållet i den här katalogen till katalogen C:\node\chatapp\WorkerRole1 som skapades tidigare.
De markerade objekten i skärmbilden ovan är de filer som kopieras från katalogen examples\chat
I katalogen C:\node\chatapp\WorkerRole1 tar du bort filenserver.js och byter sedan namn på filenapp.js till server.js. Detta tar bort standardfilenserver.js som skapades tidigare av cmdleten Add-AzureNodeWorkerRole och ersätter den med programfilen från chattexemplet.
Ändra Server.js och installera moduler
Innan vi testar programmet i Azure-emulatorn måste vi göra några mindre ändringar. Utför följande steg i server.js-filen:
Öppna filenserver.js i Visual Studio eller någon textredigerare.
Leta reda på avsnittet Modulberoenden i början av server.js och ändra raden som innehåller sio = require('.. //.. lib//socket.io') to sio = require('socket.io') enligt nedan:
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
För att säkerställa att programmet lyssnar på rätt port öppnar du server.js i Anteckningar eller din favoritredigerare och ändrar sedan följande rad genom att ersätta 3000 med process.env.port enligt nedan:
//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); });
När du har sparat ändringarna i server.jsanvänder du följande steg för att installera nödvändiga moduler och testar sedan programmet i Azure-emulatorn:
Med Azure PowerShell ändrar du kataloger till katalogen C:\node\chatapp\WorkerRole1 och använder följande kommando för att installera de moduler som krävs av det här programmet:
PS C:\node\chatapp\WorkerRole1> npm install
Då installeras modulerna som anges i filen package.json. När kommandot är klart bör du se utdata som liknar följande:
Eftersom det här exemplet ursprungligen var en del av Socket.IO GitHub-lagringsplats och direkt refererade till Socket.IO-biblioteket efter relativ sökväg, refererades Socket.IO inte till i filen package.json, så vi måste installera det genom att utfärda följande kommando:
PS C:\node\chatapp\WorkerRole1> npm install socket.io --save
Testa och distribuera
Starta emulatorn genom att utfärda följande kommando:
PS C:\node\chatapp\WorkerRole1> Start-AzureEmulator -Launch
Anteckning
Om du stöter på problem med att starta emulatorn, t.ex. Start-AzureEmulator : Ett oväntat fel inträffade. Information: Det uppstod ett oväntat fel Kommunikationsobjektet System.ServiceModel.Channels.ServiceChannel kan inte användas för kommunikation eftersom det är i feltillstånd.
Installera om AzureAuthoringTools v 2.7.1 och AzureComputeEmulator v 2.7 – kontrollera att versionen matchar.
Öppna en webbläsare och navigera till
http://127.0.0.1
.När webbläsarfönstret öppnas anger du ett smeknamn och trycker sedan på Retur. På så sätt kan du publicera meddelanden som ett specifikt smeknamn. Om du vill testa funktioner för flera användare öppnar du ytterligare webbläsarfönster med samma URL och anger olika smeknamn.
När du har testat programmet stoppar du emulatorn genom att utfärda följande kommando:
PS C:\node\chatapp\WorkerRole1> Stop-AzureEmulator
Om du vill distribuera programmet till Azure använder du cmdleten Publish-AzureServiceProject . Exempel:
PS C:\node\chatapp\WorkerRole1> Publish-AzureServiceProject -ServiceName mychatapp -Location "East US" -Launch
Viktigt
Se till att använda ett unikt namn, annars misslyckas publiceringsprocessen. När distributionen har slutförts öppnas webbläsaren och navigerar till den distribuerade tjänsten.
Om du får ett felmeddelande om att det angivna prenumerationsnamnet inte finns i den importerade publiceringsprofilen måste du ladda ned och importera publiceringsprofilen för din prenumeration innan du distribuerar till Azure. Se avsnittet Distribuera programmet till Azure i Skapa och distribuera ett Node.js-program till en Azure Cloud Service
! [Ett webbläsarfönster som visar tjänsten som finns i Azure] [completed-app]
Anteckning
Om du får ett felmeddelande om att det angivna prenumerationsnamnet inte finns i den importerade publiceringsprofilen måste du ladda ned och importera publiceringsprofilen för din prenumeration innan du distribuerar till Azure. Se avsnittet Distribuera programmet till Azure i Skapa och distribuera ett Node.js-program till en Azure Cloud Service
Ditt program körs nu i Azure och kan vidarebefordra chattmeddelanden mellan olika klienter med hjälp av Socket.IO.
Anteckning
För enkelhetens skull är det här exemplet begränsat till chatt mellan användare som är anslutna till samma instans. Det innebär att om molntjänsten skapar två arbetsrollinstanser kan användarna bara chatta med andra som är anslutna till samma arbetsrollinstans. Om du vill skala programmet så att det fungerar med flera rollinstanser kan du använda en teknik som Service Bus för att dela Socket.IO lagra tillstånd mellan instanser. Exempel finns i användningsexempel för Service Bus-köer och ämnen i Azure SDK för Node.js GitHub-lagringsplats.
Nästa steg
I den här självstudien har du lärt dig hur du skapar ett grundläggande chattprogram som finns i en Azure Cloud Service. Information om hur du är värd för det här programmet på en Azure-webbplats finns i Skapa ett Node.js chattprogram med Socket.IO på en Azure-webbplats.
Mer information finns i Node.js Developer Center.