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:

Skapa ett molntjänstprojekt

Följande steg skapar molntjänstprojektet som ska vara värd för Socket.IO-programmet.

  1. 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.

    Azure PowerShell-ikon

  2. Skapa en katalog med namnet c:\node.

    PS C:\> md node
    
  3. Ändra kataloger till katalogen c:\node

    PS C:\> cd node
    
  4. Ange följande kommandon för att skapa en ny lösning med namnet chatapp och en arbetsroll med namnet WorkerRole1:

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

    Du ser följande svar:

    Utdata från new-azureservice och add-azurenodeworkerrolecmdlets

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.

  1. Skapa en lokal kopia av lagringsplatsen med knappen Klona . Du kan också använda ZIP-knappen för att ladda ned projektet.

    Ett webbläsarfönster som visar https://github.com/LearnBoost/socket.io/tree/master/examples/chat, med zip-nedladdningsikonen markerad

  2. 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.

    Explorer, som visar innehållet i katalogen examples\chat som extraherats från arkivet

    De markerade objekten i skärmbilden ovan är de filer som kopieras från katalogen examples\chat

  3. 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:

  1. Öppna filenserver.js i Visual Studio eller någon textredigerare.

  2. 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
    
  3. 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:

  1. 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:

    Utdata från kommandot npm install

  2. 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

  1. 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.

  2. Öppna en webbläsare och navigera till http://127.0.0.1.

  3. 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.

    Två webbläsarfönster som visar chattmeddelanden från User1 och User2

  4. När du har testat programmet stoppar du emulatorn genom att utfärda följande kommando:

    PS C:\node\chatapp\WorkerRole1> Stop-AzureEmulator
    
  5. 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.