Snabbstart: Skapa en app som visar GitHub antal stjärnor med Azure Functions och SignalR Service med Python
Med Azure SignalR Service kan du enkelt lägga till realtidsfunktioner i ditt program. Azure Functions är en serverlös plattform som gör att du kan köra din kod utan att behöva hantera någon infrastruktur. I den här snabbstarten lär du dig hur du använder SignalR Service och Azure Functions för att skapa ett serverlöst program med Python för att skicka meddelanden till klienter.
Anteckning
Du kan hämta alla koder som anges i artikeln från GitHub
Förutsättningar
Den här snabbstarten kan köras på macOS, Windows eller Linux.
Se till att du har en kodredigerare såsom Visual Studio Code installerad.
Installera Azure Functions Core Tools (version 2.7.1505 eller senare) för att köra Python Azure Function-appar lokalt.
Azure Functions kräver Python 3.6+. (Se Python-versioner som stöds)
Om du inte har en Azure-prenumerationkan du skapa ett kostnads fritt konto innan du börjar.
Har du problem? Prova felsökningsguiden eller berätta för oss.
Logga in på Azure
Logga in på Azure-portalen på https://portal.azure.com/ med ditt Azure-konto.
Har du problem? Prova felsökningsguiden eller berätta för oss.
Skapa en Azure SignalR Service-instans
Din app ansluter till en SignalR Service-instans i Azure.
Välj knappen Nytt högst upp till vänster i Azure-portalen. På sidan Nytt skriver du SignalR Service i sökrutan och trycker på RETUR.

Välj SignalR Service i sökresultatet och välj sedan Skapa.
Ange följande inställningar.
Inställning Föreslaget värde Beskrivning Resurs namn Globalt unikt namn Namn som identifierar din nya SignalR Service-instans. Giltiga tecken är a-z,0-9och-.Prenumeration Din prenumeration Prenumerationen som den här nya SignalR Service-instansen har skapats i. Resursgrupp myResourceGroup Namnet på den nya resursgruppen som SignalR Service-instansen ska skapas i. Plats USA, västra Välj en region nära dig. Prisnivå Kostnadsfri Prova Azure SignalR Service kostnadsfritt. Antal enheter Inte tillämpligt Antal enheter anger hur många anslutningar som SignalR Service-instansen kan acceptera. Det kan bara konfigureras på Standard-nivån. Tjänstläge Utan server För användning med Azure Functions eller REST API. 
Välj Skapa för att börja distribuera SignalR Service-instansen.
När instansen har distribuerats öppnar du den i portalen och letar upp dess inställnings sida. Ändra inställningen för tjänst läge till endast Server om du använder Azure SignalR-tjänsten via Azure Functions bindning eller REST API. Lämna det i klassiskt eller i annat fall.
Har du problem? Prova felsökningsguiden eller berätta för oss.
Konfigurera och köra Azure-funktionen lokalt
Kontrollera att Azure Function Core Tools är installerat. Och skapa en tom katalog och gå till katalogen med kommandoraden.
# Initialize a function project func init --worker-runtime pythonNär du har initierat ett projekt måste du skapa funktioner. I det här exemplet måste vi skapa 3 funktioner.
Kör följande kommando för att skapa
indexen funktion som ska vara värd för en webbsida för klienten.func new -n index -t HttpTriggerÖppna
index/function.jsonoch kopiera följande json-koder:{ "bindings": [ { "authLevel": "anonymous", "type": "httpTrigger", "direction": "in", "name": "req", "methods": [ "get", "post" ] }, { "type": "http", "direction": "out", "name": "res" } ] }Öppna
index/__init__.pyoch kopiera följande koder.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')Skapa en
negotiatefunktion för klienter för att hämta åtkomsttoken.func new -n negotiate -t SignalRNegotiateHTTPTriggerÖppna
negotiate/function.jsonoch kopiera följande json-koder:{ "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" } ] }Öppna och
negotiate/__init__.pykopiera följande koder:import azure.functions as func def main(req: func.HttpRequest, connectionInfo) -> func.HttpResponse: return func.HttpResponse(connectionInfo)Skapa en
broadcastfunktion för att sända meddelanden till alla klienter. I exemplet använder vi tidsutlösaren för att sända meddelanden regelbundet.func new -n broadcast -t TimerTrigger # install requests pip install requestsÖppna
broadcast/function.jsonoch kopiera följande koder.{ "scriptFile": "__init__.py", "bindings": [ { "name": "myTimer", "type": "timerTrigger", "direction": "in", "schedule": "*/5 * * * * *" }, { "type": "signalR", "name": "signalRMessages", "hubName": "serverless", "connectionStringSetting": "AzureSignalRConnectionString", "direction": "out" } ] }Öppna
broadcast/__init__.pyoch kopiera följande koder.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']) ] }))
Klientgränssnittet för det här exemplet är en webbsida. Eftersom vi läser HTML-innehåll
content/index.htmlfrån i funktionen skapar du en ny fil i katalogen underindexindex.htmlcontentrotmappen för projektet. Och kopiera följande innehåll.<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>Det är nästan klart nu. Det sista steget är att ange en anslutningssträng för SignalR Service till Azure Function-inställningar.
I den webbläsare där Azure-portalen är öppnad bekräftar du att den SignalR Service-instans som du distribuerade tidigare skapades korrekt genom att söka efter dess namn i sökrutan längst upp i portalen. Välj instansen för att öppna den.

Välj Nycklar för att visa anslutningssträngarna för SignalR Service-instansen.

Kopiera den primära anslutningssträngen. Och kör kommandot nedan.
func settings add AzureSignalRConnectionString "<signalr-connection-string>"
Kör Azure-funktionen lokalt:
func startNär Azure-funktionen körs lokalt. Använd webbläsaren för att besöka
http://localhost:7071/api/indexoch du kan se det aktuella stjärnantalet. Och om du star eller unstar i GitHub får du ett stjärnantal som uppdateras med några sekunders mellanrum.Anteckning
SignalR-bindning Azure Storage, men du kan använda den lokala lagringsemulatorn när funktionen körs lokalt. Om du får ett felmeddelande som
There was an error performing a read operation on the Blob Storage Secret Repository. Please ensure the 'AzureWebJobsStorage' connection string is valid.Du måste ladda ned och aktivera Storage Emulator
Rensa resurser
Om du inte planerar att fortsätta använda den här appen tar du bort alla resurser som skapades i snabbstarten med följande steg, så att inga kostnader uppstår:
Välj Resursgrupper i Azure Portal längst till vänster och välj sedan den resursgrupp du skapat. Du kan också använda sökrutan till att hitta resursgruppen efter dess namn.
Markera resursgruppen i fönstret som öppnas och klicka sedan på Ta bort resursgrupp.
I det nya fönstret, skriv namnet på resursgruppen som ska tas bort och klicka sedan på Ta bort.
Har du problem? Prova felsökningsguiden eller berätta för oss.
Nästa steg
I den här snabbstarten skapade och körde du ett serverlöst realtidsprogram lokalt. Läs mer om hur du använder SignalR Service-bindningar för Azure Functions. Härnäst får du lära dig mer om dubbelriktad kommunikation mellan klienter och Azure-funktionen med SignalR Service.