rychlý start: vytvoření aplikace zobrazující GitHub počtu hvězdiček pomocí Azure Functions a služby signalizace pomocí pythonu

Služba Azure SignalR Service umožňuje snadné přidávání funkcí v reálném čase do aplikací. Řešení Azure Functions představuje bezserverovou platformu, která umožňuje spouštět kód, aniž byste museli spravovat nějakou infrastrukturu. V tomto rychlém startu se dozvíte, jak pomocí služby Signal a Azure Functions vytvořit aplikaci bez serveru s Pythonem pro vysílání zpráv klientům.

Poznámka

Všechny kódy, které jsou uvedené v článku, můžete získat z GitHub

Požadavky

Toto Rychlé zprovoznění je možné spustit v systémech macOS, Windows nebo Linux.

Budete potřebovat nainstalovaný editor kódu, jako je třeba Visual Studio Code.

Pokud chcete spouštět aplikace funkcí v Pythonu pro Azure místně, nainstalujte Azure Functions Core Tools (verze 2.7.1505 nebo novější).

Azure Functions vyžaduje Python 3.6 +. (Viz podporované verze Pythonu)

Pokud ještě nemáte předplatné Azure,vytvořte si bezplatný účet před tím, než začnete.

Máte problémy? Vyzkoušejte si příručku pro odstraňování potíží nebo dejte námprosím o tom.

Přihlaste se k Azure.

Přihlaste se k webu Azure Portal na adrese https://portal.azure.com/ pomocí svého účtu Azure.

Máte problémy? Vyzkoušejte si příručku pro odstraňování potíží nebo dejte námprosím o tom.

Vytvoření instance služby Azure SignalR Service

Vaše aplikace se připojí k instanci služby SignalR Service v Azure.

  1. Vyberte tlačítko Nový v levém horním rohu portálu Azure Portal. Do vyhledávacího pole na obrazovce Nový zadejte SignalR Service a stiskněte klávesu Enter.

    Snímek obrazovky ukazuje hledání služby signalizace v Azure Portal.

  2. Ve výsledcích hledání vyberte SignalR Service a pak vyberte Vytvořit.

  3. Zadejte následující nastavení.

    Nastavení Navrhovaná hodnota Popis
    Název prostředku Globálně jedinečný název Název, který identifikuje novou instanci služby SignalR Service. Platné znaky jsou a-z, 0-9 a -.
    Předplatné Vaše předplatné Předplatné, ve kterém se nová instance služby SignalR Service vytvoří.
    Skupina prostředků myResourceGroup Název nové skupiny prostředků, ve které se má instance služby SignalR Service vytvořit.
    Umístění USA – západ Vyberte oblast , která je blízko vás.
    Cenová úroveň Free Vyzkoušejte si službu Azure SignalR Service zdarma.
    Počet jednotek Neuvedeno Počet jednotek určuje, kolik připojení může instance služby SignalR Service přijmout. To lze nakonfigurovat jen na úrovni Standard.
    Režim služby Bez serveru Pro použití s Azure Functions nebo REST API.

    Snímek obrazovky znázorňující kartu základy signálu s hodnotami.

  4. Pokud chcete začít nasazovat instanci služby SignalR Service, vyberte Vytvořit.

  5. Po nasazení instance ho otevřete na portálu a najděte jeho stránku nastavení. Nastavte režim služby na možnost bez serveru jenom v případě, že používáte službu Azure Signal service prostřednictvím Azure Functions vazby nebo REST API. V opačném případě je ponechte v klasickém nebo výchozím nastavení .

Máte problémy? Vyzkoušejte si příručku pro odstraňování potíží nebo dejte námprosím o tom.

Nastavení a spuštění funkce Azure místně

  1. Ujistěte se, že máte nainstalované nástroje Azure Function Core. A vytvořte prázdný adresář a přejděte do adresáře pomocí příkazového řádku.

    # Initialize a function project
    func init --worker-runtime python
    
  2. Po inicializaci projektu je nutné vytvořit funkce. V této ukázce musíme vytvořit 3 funkce.

    1. Spuštěním následujícího příkazu vytvořte index funkci, která bude hostovat webovou stránku pro klienta.

      func new -n index -t HttpTrigger
      

      Otevřete index/function.json a zkopírujte následující kódy JSON:

      {
        "bindings": [
          {
            "authLevel": "anonymous",
            "type": "httpTrigger",
            "direction": "in",
            "name": "req",
            "methods": [
              "get",
              "post"
            ]
          },
          {
            "type": "http",
            "direction": "out",
            "name": "res"
          }
        ]
      }
      

      Otevřete index/__init__.py a zkopírujte následující kódy.

      import os
      
      import azure.functions as func
      
      
      def main(req: func.HttpRequest) -> func.HttpResponse:
          f = open(os.path.dirname(os.path.realpath(__file__)) + '/../content/index.html')
          return func.HttpResponse(f.read(), mimetype='text/html')
      
    2. Vytvořte negotiate funkci pro klienty pro získání přístupového tokenu.

      func new -n negotiate -t SignalRNegotiateHTTPTrigger
      

      Otevřete negotiate/function.json a zkopírujte následující kódy JSON:

      {
        "scriptFile": "__init__.py",
        "bindings": [
          {
            "authLevel": "anonymous",
            "type": "httpTrigger",
            "direction": "in",
            "name": "req",
            "methods": [
              "post"
            ]
          },
          {
            "type": "http",
            "direction": "out",
            "name": "$return"
          },
          {
            "type": "signalRConnectionInfo",
            "name": "connectionInfo",
            "hubName": "serverless",
            "connectionStringSetting": "AzureSignalRConnectionString",
            "direction": "in"
          }
        ]
      }
      

      A pak otevřete negotiate/__init__.py a zkopírujte následující kódy:

      import azure.functions as func
      
      
      def main(req: func.HttpRequest, connectionInfo) -> func.HttpResponse:
          return func.HttpResponse(connectionInfo)
      
    3. Vytvořte broadcast funkci pro vysílání zpráv všem klientům. V ukázce používáme časový Trigger k pravidelnému vysílání zpráv.

      func new -n broadcast -t TimerTrigger
      # install requests
      pip install requests
      

      Otevřete broadcast/function.json a zkopírujte následující kódy.

      {
        "scriptFile": "__init__.py",
        "bindings": [
          {
            "name": "myTimer",
            "type": "timerTrigger",
            "direction": "in",
            "schedule": "*/5 * * * * *"
          },
          {
            "type": "signalR",
            "name": "signalRMessages",
            "hubName": "serverless",
            "connectionStringSetting": "AzureSignalRConnectionString",
            "direction": "out"
          }
        ]
      }
      

      Otevřete broadcast/__init__.py a zkopírujte následující kódy.

      import requests
      import json
      
      import azure.functions as func
      
      
      def main(myTimer: func.TimerRequest, signalRMessages: func.Out[str]) -> None:
          headers = {'User-Agent': 'serverless'}
          res = requests.get('https://api.github.com/repos/azure/azure-signalr', headers=headers)
          jres = res.json()
      
          signalRMessages.set(json.dumps({
              'target': 'newMessage',
              'arguments': [ 'Current star count of https://github.com/Azure/azure-signalr is: ' + str(jres['stargazers_count']) ]
          }))
      
  3. Rozhraní klienta této ukázky je webová stránka. V případě, že přečetli jsme obsah HTML z content/index.html index funkce ve funkci, vytvořte nový soubor index.html v content adresáři pod kořenovou složkou projektu. A zkopírujte následující obsah.

    <html>
    
    <body>
      <h1>Azure SignalR Serverless Sample</h1>
      <div id="messages"></div>
      <script src="https://cdnjs.cloudflare.com/ajax/libs/microsoft-signalr/3.1.7/signalr.min.js"></script>
      <script>
        let messages = document.querySelector('#messages');
        const apiBaseUrl = window.location.origin;
        const connection = new signalR.HubConnectionBuilder()
            .withUrl(apiBaseUrl + '/api')
            .configureLogging(signalR.LogLevel.Information)
            .build();
          connection.on('newMessage', (message) => {
            document.getElementById("messages").innerHTML = message;
          });
    
          connection.start()
            .catch(console.error);
      </script>
    </body>
    
    </html>
    
  4. Teď je skoro hotové. Posledním krokem je nastavení připojovacího řetězce pro službu signalizace na nastavení funkce Azure.

    1. V prohlížeči, ve kterém máte otevřený Azure Portal, si ověřte, že se úspěšně vytvořila instance služby SignalR Service, kterou jste nasadili dříve. Vyhledejte její název pomocí vyhledávacího pole v horní části stránky portálu. Instanci vyberte a otevřete.

      Vyhledání instance služby SignalR

    2. Výběrem možnosti Klíče zobrazte připojovací řetězce instance služby SignalR.

      Snímek obrazovky, který zvýrazní primární připojovací řetězec.

    3. Zkopírujte primární připojovací řetězec. A spusťte následující příkaz.

      func settings add AzureSignalRConnectionString "<signalr-connection-string>"
      
  5. Spusťte funkci Azure Functions v místním prostředí:

    func start
    

    Funkce Azure Functions se spouští místně. Pomocí prohlížeče můžete navštívit http://localhost:7071/api/index a zobrazit aktuální počet hvězdiček. a pokud v GitHub hvězdičku nebo nestarou, obdržíte každých pár sekund aktualizaci počtu hvězdiček.

    Poznámka

    vazba signálu vyžaduje Azure Storage, ale můžete použít emulátor místního úložiště, pokud je funkce spuštěná místně. pokud máte nějakou chybu, například There was an error performing a read operation on the Blob Storage Secret Repository. Please ensure the 'AzureWebJobsStorage' connection string is valid. potřebujete stáhnout a povolit Storage Emulator

Vyčištění prostředků

Pokud nebudete tuto aplikace nadále používat, odstraňte na základě následujícího postupu všechny prostředky vytvořené podle tohoto rychlého startu, aby se vám neúčtovaly žádné poplatky:

  1. Úplně nalevo na webu Azure Portal vyberte Skupiny prostředků a pak vyberte skupinu prostředků, kterou jste vytvořili. Případně můžete použít vyhledávací pole a skupinu prostředků vyhledat podle jejího názvu.

  2. V okně, které se otevře, vyberte příslušnou skupinu prostředků a pak klikněte na Odstranit skupinu prostředků.

  3. V novém okně zadejte název skupiny prostředků, kterou chcete odstranit, a pak klikněte na Odstranit.

Máte problémy? Vyzkoušejte si příručku pro odstraňování potíží nebo dejte námprosím o tom.

Další kroky

V tomto rychlém startu jste vytvořili a spustili aplikaci bez serveru v reálném čase v místním prostředí. Přečtěte si další informace o použití vazeb služby Signal pro Azure Functions. V dalším kroku se dozvíte, jak obousměrnou komunikaci mezi klienty a službou Azure Functions s využitím služby Signal.