Rövid útmutató: Kiszolgáló nélküli alkalmazás létrehozása az Azure Functions és a SignalR Service használatával JavaScript használatával
Ebben a cikkben az Azure SignalR Service, az Azure Functions és a JavaScript használatával hozhat létre kiszolgáló nélküli alkalmazást az üzenetek ügyfeleknek való közvetítéséhez.
Előfeltételek
Ez a rövid útmutató macOS, Windows vagy Linux rendszeren is futtatható.
Előfeltételek | Leírás |
---|---|
Azure-előfizetés | Ha nem rendelkezik előfizetéssel, hozzon létre ingyenes Azure-fiókot |
Kódszerkesztő | Szüksége van egy kódszerkesztőre, például a Visual Studio Code-ra. |
Azure Functions Core Tools | A 4.0.5611-es vagy újabb verzió szükséges Node.js 4-es verziójú programozási modell futtatásához. |
Node.js LTS | Tekintse meg a támogatott node.js-verziókat az Azure Functions JavaScript fejlesztői útmutatójában. |
Azurite | A SignalR-kötéshez Azure Storage szükséges. Helyi tárolóemulátort akkor használhat, ha egy függvény helyileg fut. |
Azure CLI | Az Azure CLI használatával is létrehozhat egy Azure SignalR-szolgáltatáspéldányt. |
Azure SignalR Service-példány létrehozása
Ebben a szakaszban egy alapszintű Azure SignalR-példányt hoz létre az alkalmazáshoz. Az alábbi lépések az Azure Portal használatával hoznak létre új példányt, de használhatja az Azure CLI-t is. További információ: az signalr create command in the Azure SignalR Service CLI Reference.
- Jelentkezzen be az Azure Portalra.
- A lap bal felső részén válassza az + Erőforrás létrehozása lehetőséget.
- Az Erőforrás létrehozása lap Search szolgáltatás és piactér szövegmezőjében adja meg a signalr kifejezést, majd válassza ki a SignalR szolgáltatást a listából.
- A SignalR szolgáltatás oldalán válassza a Létrehozás lehetőséget.
- Az Alapok lapon adja meg az új SignalR-szolgáltatáspéldány alapvető adatait. Írja be a következő értékeket:
Mező | Ajánlott érték | Leírás |
---|---|---|
Előfizetés | Válassza ki az előfizetését | Válassza ki azt az előfizetést, amelyet egy új SignalR-szolgáltatáspéldány létrehozásához szeretne használni. |
Erőforráscsoport | SignalRTestResources nevű erőforráscsoport létrehozása | Válasszon ki vagy hozzon létre egy erőforráscsoportot a SignalR-erőforráshoz. Hasznos, ha egy új erőforráscsoportot hoz létre ehhez az oktatóanyaghoz ahelyett, hogy meglévő erőforráscsoportot használ. Ha az oktatóanyag elvégzése után szeretné felszabadítani az erőforrásokat, törölje az erőforráscsoportot. Az erőforráscsoport törlése a csoporthoz tartozó összes erőforrást is törli. Ez a művelet nem vonható vissza. Mielőtt töröl egy erőforráscsoportot, győződjön meg arról, hogy nem tartalmazza a megtartani kívánt erőforrásokat. További információk: Erőforráscsoportok használata az Azure-erőforrások kezeléséhez. |
Erőforrás neve | testsignalr | Írja be a SignalR-erőforráshoz használandó egyedi erőforrásnevet. Ha a testsignalr már szerepel a régióban, adjon hozzá egy számjegyet vagy karaktert, amíg a név egyedi nem lesz. A névnek 1–63 karakter hosszúságú sztringnek kell lennie, és csak számokat, betűket és kötőjelet ( - ) tartalmazhat. A név nem kezdődhet és nem végződhet kötőjeljellel, és az egymást követő kötőjelkarakterek érvénytelenek. |
Régió | Régió kiválasztása | Válassza ki az új SignalR-szolgáltatáspéldány megfelelő régióját. Az Azure SignalR szolgáltatás jelenleg nem érhető el minden régióban. További információ: Azure SignalR Service-régió rendelkezésre állása |
Tarifacsomag | Válassza a Módosítás lehetőséget, majd válassza az Ingyenes (Csak dev/Test) lehetőséget. Válassza a Kiválasztás lehetőséget a tarifacsomag kiválasztásának megerősítéséhez. | Az Azure SignalR szolgáltatás három tarifacsomagot tartalmaz: ingyenes, standard és prémium. Az oktatóanyagok az ingyenes szintet használják, hacsak az előfeltételek másként nem rendelkeznek. A szintek és a díjszabás közötti funkcióbeli különbségekről további információt az Azure SignalR Service díjszabásában talál . |
Szolgáltatás mód | Válassza ki a megfelelő szolgáltatási módot | Az Alapértelmezett beállítást akkor használja, ha a SignalR hub logikáját üzemelteti a webalkalmazásokban, és proxyként használja a SignalR szolgáltatást. Kiszolgáló nélküli technológiát, például az Azure Functionst használva üzemeltetheti a SignalR hub logikáját. A klasszikus mód csak a visszamenőleges kompatibilitást szolgálja, ezért nem ajánlott használni. További információ: Szolgáltatás mód az Azure SignalR Service-ben. |
A SignalR-oktatóanyagok Hálózatkezelés és Címkék lapján nem kell módosítania a beállításokat.
- Válassza az Alapismeretek lap alján található Véleményezés + létrehozás gombot.
- A Véleményezés + létrehozás lapon tekintse át az értékeket, majd válassza a Létrehozás lehetőséget. Az üzembe helyezés végrehajtása néhány percet vesz igénybe.
- Amikor az üzembe helyezés befejeződött, válassza az Erőforrás megnyitása gombot.
- A SignalR erőforráslapján válassza a bal oldali menü kulcsait a Gépház alatt.
- Másolja ki az elsődleges kulcshoz tartozó Csatlakozás ion sztringet. Erre a kapcsolati sztring van szüksége az alkalmazás konfigurálásához az oktatóanyag későbbi részében.
Függvényprojekt beállítása
Győződjön meg arról, hogy telepítve vannak az Azure Functions Core Tools.
- Nyisson meg egy parancssort.
- Hozzon létre projektkönyvtárat, majd váltson rá.
- Futtassa az Azure Functions
func init
parancsot egy új projekt inicializálásához.
func init --worker-runtime javascript --language javascript --model V4
A projektfüggvények létrehozása
A projekt inicializálása után függvényeket kell létrehoznia. Ehhez a projekthez három függvény szükséges:
index
: Egy ügyfél webhelyét üzemelteti.negotiate
: Lehetővé teszi az ügyfél számára a hozzáférési jogkivonat lekérését.broadcast
: Idő eseményindítóval rendszeres időközönként küld üzeneteket az összes ügyfélnek.
Amikor a parancsot a func new
projekt gyökérkönyvtárából futtatja, az Azure Functions Core Tools létrehozza azokat a függvényforrásfájlokat, amelyek egy függvénynévvel rendelkező mappában vannak tárolva. Szükség szerint szerkessze a fájlokat, és cserélje le az alapértelmezett kódot az alkalmazáskódra.
Az indexfüggvény létrehozása
Futtassa a következő parancsot a
index
függvény létrehozásához.func new -n index -t HttpTrigger
Szerkessze az src/functions/httpTrigger.js fájlt, és cserélje le a tartalmat a következő json-kódra:
const { app } = require('@azure/functions'); const fs = require('fs').promises; const path = require('path'); app.http('index', { methods: ['GET', 'POST'], authLevel: 'anonymous', handler: async (request, context) => { try { context.log(`Http function processed request for url "${request.url}"`); const filePath = path.join(__dirname,'../content/index.html'); const html = await fs.readFile(filePath); return { body: html, headers: { 'Content-Type': 'text/html' } }; } catch (error) { context.log(error); return { status: 500, jsonBody: error } } } });
A egyeztetési függvény létrehozása
Futtassa a következő parancsot a
negotiate
függvény létrehozásához.func new -n negotiate -t HttpTrigger
Szerkessze az src/functions/negotiate.js fájlt, és cserélje le a tartalmat a következő json-kódra:
const { app, input } = require('@azure/functions'); const inputSignalR = input.generic({ type: 'signalRConnectionInfo', name: 'connectionInfo', hubName: 'serverless', connectionStringSetting: 'SIGNALR_CONNECTION_STRING', }); app.post('negotiate', { authLevel: 'anonymous', handler: (request, context) => { try { return { body: JSON.stringify(context.extraInputs.get(inputSignalR)) } } catch (error) { context.log(error); return { status: 500, jsonBody: error } } }, route: 'negotiate', extraInputs: [inputSignalR], });
Hozzon létre egy szórási függvényt.
Futtassa a következő parancsot a
broadcast
függvény létrehozásához.func new -n broadcast -t TimerTrigger
Szerkessze az src/functions/broadcast.js elemet, és cserélje le a tartalmat a következő kódra:
const { app, output } = require('@azure/functions'); const getStars = require('../getStars'); var etag = ''; var star = 0; const goingOutToSignalR = output.generic({ type: 'signalR', name: 'signalR', hubName: 'serverless', connectionStringSetting: 'SIGNALR_CONNECTION_STRING', }); app.timer('sendMessasge', { schedule: '0 * * * * *', extraOutputs: [goingOutToSignalR], handler: async (myTimer, context) => { try { const response = await getStars(etag); if(response.etag === etag){ console.log(`Same etag: ${response.etag}, no need to broadcast message`); return; } etag = response.etag; const message = `${response.stars}`; context.extraOutputs.set(goingOutToSignalR, { 'target': 'newMessage', 'arguments': [message] }); } catch (error) { context.log(error); } } });
A index.html fájl létrehozása
Az alkalmazás ügyfélfelülete egy weblap. A index
függvény HTML-tartalmat olvas be a content/index.html fájlból.
Hozzon létre egy mappát
content
a projekt gyökérmappájában.Hozza létre a fájlt content/index.html.
Másolja a következő tartalmat a content/index.html fájlba, és mentse:
<html> <body> <h1>Azure SignalR Serverless Sample</h1> <div>Instructions: Goto <a href="https://github.com/Azure/azure-signalr">GitHub repo</a> and star the repository.</div> <hr> <div>Star count: <div id="messages"></div></div> <script src="https://cdnjs.cloudflare.com/ajax/libs/microsoft-signalr/8.0.0/signalr.min.js"></script> <script> let messages = document.querySelector('#messages'); const apiBaseUrl = window.location.origin; console.log(`apiBaseUrl: ${apiBaseUrl}`); const connection = new signalR.HubConnectionBuilder() .withUrl(apiBaseUrl + '/api') .configureLogging(signalR.LogLevel.Information) .build(); connection.on('newMessage', (message) => { console.log(`message: ${message}`); document.getElementById("messages").innerHTML = message; }); connection.start() .catch(console.error); </script> </body> </html>
Az Azure Storage beállítása
Az Azure Functions használatához egy tárfiók szükséges. Válasszon a következő két lehetőség közül:
- Futtassa az ingyenes Azure Storage Emulatort.
- Használja az Azure Storage szolgáltatást. Ez költségekkel járhat, ha továbbra is használja.
Indítsa el az Azurite Storage emulátort:
azurite -l azurite -d azurite\debug.log
Győződjön meg arról, hogy a
AzureWebJobsStorage
local.settings.json be van állítvaUseDevelopmentStorage=true
.
Adja hozzá a SignalR szolgáltatás kapcsolati sztring a függvényalkalmazás beállításaihoz
Már majdnem elkészült. Az utolsó lépés a SignalR szolgáltatás kapcsolati sztring beállítása az Azure-függvényalkalmazás beállításaiban.
Az Azure Portalon lépjen a korábban üzembe helyezett SignalR-példányra.
Válassza a Kulcsok elemet a SignalR-szolgáltatáspéldány kapcsolati sztringjeinek megtekintéséhez.
Másolja ki az elsődleges kapcsolati sztring, és hajtsa végre a következő parancsot:
func settings add AzureSignalRConnectionString "<signalr-connection-string>"
Az Azure-függvényalkalmazás helyi futtatása
Futtassa az Azure-függvényalkalmazást a helyi környezetben:
func start
Miután az Azure-függvény helyileg fut, nyissa meg a következőt http://localhost:7071/api/index
: . A lapon látható a GitHub Azure/azure-signalr-adattár aktuális csillagszáma. Amikor a GitHubon csillagozza vagy leválasztja az adattárat, néhány másodpercenként megjelenik a frissített szám.
Problémákat tapasztal? Próbálja ki a hibaelhárítási útmutatót , vagy tudassa velünk.
Az erőforrások eltávolítása
Ha nem használja tovább az alkalmazást, akkor a következő lépésekkel a mintaalkalmazás által létrehozott összes erőforrást törölheti a költségek elkerülése érdekében:
Az Azure Portalon válassza az Erőforráscsoportok lehetőséget a bal szélen, majd a létrehozott erőforráscsoport. Másik lehetőségként a keresőmezőben, név alapján is rákereshet az erőforráscsoportra.
Az ekkor megnyíló új ablakban válassza ki az erőforráscsoportot, és kattintson az Erőforráscsoport törlése elemre.
Az új ablakban írja be a törölni kívánt erőforráscsoport nevét, majd kattintson a Törlés elemre.
Mintakód
A cikkben használt összes kódot lekérheti a GitHub-adattárból:
Következő lépések
Ebben a rövid útmutatóban egy valós idejű kiszolgáló nélküli alkalmazást készített és futtatott a localhostban. A következő lépésben megtudhatja, hogyan kommunikálhat kétirányúan az ügyfelek és az Azure-függvények között a SignalR Szolgáltatással.