Hızlı Başlangıç: Javascript kullanarak Azure İşlevleri ve SignalR Hizmeti ile sunucusuz uygulama oluşturma
Bu makalede, istemcilere ileti yayınlamak üzere sunucusuz bir uygulama oluşturmak için Azure SignalR Hizmeti, Azure İşlevleri ve JavaScript kullanacaksınız.
Ön koşullar
Bu hızlı başlangıç; macOS, Windows veya Linux üzerinde çalıştırılabilir.
Önkoşul | Açıklama |
---|---|
Bir Azure aboneliği | Aboneliğiniz yoksa ücretsiz Azure hesabı oluşturun |
Kod düzenleyicisi | Visual Studio Code gibi bir kod düzenleyicisi gerekir. |
Azure Functions Core Tools | Python Azure İşlevi uygulamalarını yerel olarak çalıştırmak için 2.7.1505 veya üzeri bir sürüm gerekir. |
Node.js | Azure İşlevleri JavaScript geliştirici kılavuzunda desteklenen node.js sürümlerine bakın. |
Azurite | SignalR bağlaması için Azure Depolama gerekir. bir işlev yerel olarak çalışırken yerel depolama öykünücüsü kullanabilirsiniz. |
Azure CLI | İsteğe bağlı olarak, azure CLI kullanarak bir Azure SignalR Hizmeti örneği oluşturabilirsiniz. |
Bir Azure SignalR Hizmeti örneği oluşturma
Bu bölümde, uygulamanız için kullanılacak temel bir Azure SignalR örneği oluşturacaksınız. Aşağıdaki adımlarda yeni bir örnek oluşturmak için Azure portalı kullanılır, ancak Azure CLI'yı da kullanabilirsiniz. Daha fazla bilgi için Azure SignalR Hizmeti CLI Başvurusu'ndaki az signalr create komutuna bakın.
- Azure Portal oturum açın.
- Sayfanın sol üst kısmında + Kaynak oluştur'u seçin.
- Kaynak oluştur sayfasında, Arama hizmeti s ve market metin kutusuna signalr yazın ve listeden SignalR Hizmeti seçin.
- SignalR Hizmeti sayfasında Oluştur'u seçin.
- Temel Bilgiler sekmesinde, yeni SignalR Hizmeti örneğinin temel bilgilerini girersiniz. Aşağıdaki değerleri girin:
Alan | Önerilen Değer | Tanım |
---|---|---|
Abonelik | Aboneliğinizi seçin | Yeni bir SignalR Hizmeti örneği oluşturmak için kullanmak istediğiniz aboneliği seçin. |
Kaynak grubu | SignalRTestResources adlı bir kaynak grubu oluşturma | SignalR kaynağınız için bir kaynak grubu seçin veya oluşturun. Mevcut bir kaynak grubunu kullanmak yerine bu öğretici için yeni bir kaynak grubu oluşturmak yararlı olur. Öğreticiyi tamamladıktan sonra kaynakları boşaltmak için kaynak grubunu silin. Bir kaynak grubunun silinmesi, gruba ait olan tüm kaynakları da siler. Bu eylem geri alınamaz. Bir kaynak grubunu silmeden önce, tutmak istediğiniz kaynakları içermediğinden emin olun. Daha fazla bilgi için bkz. Azure kaynaklarınızı yönetmek için kaynak gruplarını kullanma. |
Kaynak adı | testsignalr | SignalR kaynağı için kullanılacak benzersiz kaynak adını girin. Testsignalr bölgenizde zaten alınmışsa, ad benzersiz olana kadar bir basamak veya karakter ekleyin. Ad 1 ile 63 karakter arasında bir dize olmalı ve yalnızca sayı, harf ve kısa çizgi ( - ) karakteri içermelidir. Ad kısa çizgi karakteriyle başlayamaz veya bitemez ve ardışık kısa çizgi karakterleri geçerli değildir. |
Bölge | Bölgenizi seçin | Yeni SignalR Hizmeti örneğiniz için uygun bölgeyi seçin. Azure SignalR Hizmeti şu anda tüm bölgelerde kullanılamamaktadır. Daha fazla bilgi için bkz. Azure SignalR Hizmeti bölge kullanılabilirliği |
Fiyatlandırma katmanı | Değiştir'i ve ardından Ücretsiz (Yalnızca Geliştirme/Test) seçeneğini belirleyin. Fiyatlandırma katmanı seçiminizi onaylamak için Seç'i seçin. | Azure SignalR Hizmeti üç fiyatlandırma katmanı vardır: Ücretsiz, Standart ve Premium. Öğreticiler, önkoşullarda aksi belirtilmedikçe Ücretsiz katmanını kullanır. Katmanlar ve fiyatlandırma arasındaki işlevsellik farkları hakkında daha fazla bilgi için bkz. fiyatlandırma Azure SignalR Hizmeti |
Hizmet modu | Uygun hizmet modunu seçin | Web uygulamalarınızda SignalR hub mantığını barındırırken ve SignalR hizmetini ara sunucu olarak kullanırken Varsayılan'ı kullanın. SignalR hub mantığını barındırmak için Azure İşlevleri gibi Sunucusuz teknolojileri kullanırken Sunucusuz'u kullanın. Klasik mod yalnızca geriye dönük uyumluluk içindir ve kullanılması önerilmez. Daha fazla bilgi için bkz. Azure SignalR Hizmeti'de hizmet modu. |
SignalR öğreticileri için Ağ ve Etiketler sekmelerindeki ayarları değiştirmeniz gerekmez.
- Temel Bilgiler sekmesinin en altındaki Gözden Geçir + oluştur düğmesini seçin.
- Gözden geçir ve oluştur sekmesinde değerleri gözden geçirin ve Oluştur'u seçin. Dağıtımın tamamlanması birkaç dakika sürer.
- Dağıtım tamamlandığında Kaynağa git düğmesini seçin.
- SignalR kaynağı sayfasında, soldaki menüden Ayarlar altında Anahtarlar'ı seçin.
- Birincil anahtar için Bağlan ion dizesini kopyalayın. Bu öğreticinin ilerleyen bölümlerinde uygulamanızı yapılandırmak için bu bağlantı dizesi gerekir.
İşlev projelerini ayarlama
Azure İşlevleri Temel Araçları'nın yüklü olduğundan emin olun.
- Bir komut satırı açın.
- Proje dizini oluşturun ve sonra bu dizine geçin.
- Yeni bir proje başlatmak için Azure İşlevleri
func init
komutunu çalıştırın.
# Initialize a function project
func init --worker-runtime javascript
Proje işlevlerini oluşturma
Projeyi başlatdıktan sonra işlevler oluşturmanız gerekir. Bu proje için üç işlev gerekir:
index
: İstemci için bir web sayfası barındırıyor.negotiate
: İstemcinin erişim belirteci almasına izin verir.broadcast
: İletileri tüm istemcilere düzenli aralıklarla yayınlamak için bir zaman tetikleyicisi kullanır.
Komutu projenin kök dizininden çalıştırdığınızdafunc new
, Azure İşlevleri Core Tools bunları işlev adıyla bir klasörde depolayan işlev kaynak dosyalarını oluşturur. Varsayılan kodu uygulama koduyla değiştirerek dosyaları gerektiği gibi düzenleyeceksiniz.
Dizin işlevini oluşturma
İşlevi oluşturmak
index
için aşağıdaki komutu çalıştırın.func new -n index -t HttpTrigger
index/function.json dosyasını düzenleyin ve içeriğini aşağıdaki json koduyla değiştirin:
{ "bindings": [ { "authLevel": "anonymous", "type": "httpTrigger", "direction": "in", "name": "req", "methods": [ "get", "post" ] }, { "type": "http", "direction": "out", "name": "res" } ] }
index/index.js dosyasını düzenleyin ve içeriğini aşağıdaki kodla değiştirin:
var fs = require('fs').promises module.exports = async function (context, req) { const path = context.executionContext.functionDirectory + '/../content/index.html' try { var data = await fs.readFile(path); context.res = { headers: { 'Content-Type': 'text/html' }, body: data } context.done() } catch (err) { context.log.error(err); context.done(err); } }
Negotiate işlevini oluşturma
İşlevi oluşturmak
negotiate
için aşağıdaki komutu çalıştırın.func new -n negotiate -t HttpTrigger
negotiate/function.json dosyasını düzenleyin ve içeriğini aşağıdaki json koduyla değiştirin:
{ "disabled": false, "bindings": [ { "authLevel": "anonymous", "type": "httpTrigger", "direction": "in", "methods": [ "post" ], "name": "req", "route": "negotiate" }, { "type": "http", "direction": "out", "name": "res" }, { "type": "signalRConnectionInfo", "name": "connectionInfo", "hubName": "serverless", "connectionStringSetting": "AzureSignalRConnectionString", "direction": "in" } ] }
negotiate/index.js dosyasını düzenleyin ve içeriği aşağıdaki JavaScript koduyla değiştirin:
module.exports = async function (context, req, connectionInfo) { context.res.body = connectionInfo; };
Yayın işlevi oluşturma.
İşlevi oluşturmak
broadcast
için aşağıdaki komutu çalıştırın.func new -n broadcast -t TimerTrigger
broadcast/function.json dosyasını düzenleyin ve içeriğini aşağıdaki kodla değiştirin:
{ "bindings": [ { "name": "myTimer", "type": "timerTrigger", "direction": "in", "schedule": "*/5 * * * * *" }, { "type": "signalR", "name": "signalRMessages", "hubName": "serverless", "connectionStringSetting": "AzureSignalRConnectionString", "direction": "out" } ] }
broadcast/index.js dosyasını düzenleyin ve içeriğini aşağıdaki kodla değiştirin:
var https = require('https'); var etag = ''; var star = 0; module.exports = function (context) { var req = https.request("https://api.github.com/repos/azure/azure-signalr", { method: 'GET', headers: {'User-Agent': 'serverless', 'If-None-Match': etag} }, res => { if (res.headers['etag']) { etag = res.headers['etag'] } var body = ""; res.on('data', data => { body += data; }); res.on("end", () => { if (res.statusCode === 200) { var jbody = JSON.parse(body); star = jbody['stargazers_count']; } context.bindings.signalRMessages = [{ "target": "newMessage", "arguments": [ `Current star count of https://github.com/Azure/azure-signalr is: ${star}` ] }] context.done(); }); }).on("error", (error) => { context.log(error); context.res = { status: 500, body: error }; context.done(); }); req.end(); }
index.html dosyasını oluşturma
Bu uygulamanın istemci arabirimi bir web sayfasıdır. İşlev, index
content/index.html dosyasındaki HTML içeriğini okur.
Proje kök klasörünüzde adlı
content
bir klasör oluşturun.Dosya content/index.html oluşturun.
Aşağıdaki içeriği content/index.html dosyasına kopyalayın ve kaydedin:
<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>
SignalR Hizmeti bağlantı dizesi işlev uygulaması ayarlarına ekleme
Azure İşlevleri çalışması için bir depolama hesabı gerekir. Azure Depolama Öykünücüsü'ni yükleyebilir ve çalıştırabilirsiniz. Alternatif olarak, aşağıdaki komutla gerçek depolama hesabınızı kullanmak için ayarı güncelleştirebilirsiniz: bash func settings add AzureWebJobsStorage "<storage-connection-string>"
Neredeyse bitti. Son adım, Azure İşlevi uygulama ayarlarında SignalR Hizmeti bağlantı dizesi ayarlamaktır.
Azure portalında daha önce dağıtılan SignalR örneğine gidin.
SignalR Hizmeti örneğinin bağlantı dizelerini görüntülemek için Anahtarlar’ı seçin.
Birincil bağlantı dizesi kopyalayın ve komutunu yürütür:
func settings add AzureSignalRConnectionString "<signalr-connection-string>"
Azure İşlevi uygulamasını yerel olarak çalıştırma
Azurite depolama öykünücüsİnİ başlatın:
azurite
Azure İşlevi uygulamasını yerel ortamda çalıştırın:
func start
Dekont
Blob depolamada okuma hatalarını gösteren bir hata görürseniz local.settings.json dosyasındaki 'AzureWebJobs Depolama' ayarının olarak UseDevelopmentStorage=true
ayarlandığından emin olun.
Azure İşlevi yerel olarak çalıştırıldıktan sonra adresine http://localhost:7071/api/index
gidin. Sayfada GitHub Azure/azure-signalr deposu için geçerli yıldız sayısı görüntülenir. GitHub'da depoyu yıldızladığınızda veya depoyu açtığınızda, birkaç saniyede bir yenilenen sayıyı görürsünüz.
Sorun mu yaşıyorsunuz? Sorun giderme kılavuzunu deneyin veya bize bildirin
Kaynakları temizleme
Bu uygulamayı kullanmaya devam etmeyecekseniz, herhangi bir ücret ödememek için aşağıdaki adımları kullanarak bu hızlı başlangıç tarafından oluşturulan tüm kaynakları silin:
Azure portalında, en solda bulunan Kaynak grupları’nı ve ardından oluşturduğunuz kaynak grubunu seçin. Alternatif olarak kaynak grubunu adıyla bulmak için arama kutusunu kullanabilirsiniz.
Açılan pencerede kaynak grubunu seçin ve Kaynak grubunu sil’e tıklayın.
Yeni pencerede, silmek için kaynak grubunun adını yazıp Sil öğesine tıklayın.
Sonraki adımlar
Bu hızlı başlangıçta, localhost'ta gerçek zamanlı sunucusuz bir uygulama oluşturup çalıştırmıştınız. Ardından, SignalR Hizmeti ile istemciler ile Azure İşlevi arasında çift yönlü iletişim kurma hakkında daha fazla bilgi edinin.