JavaScript için Web PubSub istemci kitaplığı
Azure Web PubSub , geliştiricilerin büyük ölçekte yayımlama-abone olma desenleriyle web uygulamalarında gerçek zamanlı özellikleri kolayca oluşturmalarına yardımcı olan bir bulut hizmetidir.
Sunucu ile istemciler arasında veya yayımla-abone ol desenlerini izleyen istemciler arasında gerçek zamanlı mesajlaşma gerektiren tüm senaryolar Web PubSub'un kullanılmasından yararlanabilir. Geliştiricilerin artık zaman aralıklarında yinelenen HTTP istekleri göndererek sunucuyu yoklaması gerekmez ve bu da boşa harcanabilir ve ölçeklendirilmesi zor olur.
Aşağıdaki diyagramda gösterildiği gibi, istemcileriniz Web PubSub kaynağınızla WebSocket bağlantıları kurar. Bu istemci kitaplığı:
- istemci bağlantılarını yönetmeyi basitleştirir
- istemciler arasında ileti göndermeyi basitleştirir
- İstenmeyen istemci bağlantısı bırakıldıktan sonra otomatik olarak yeniden denemeler
- bağlantı bırakmalarından kurtarıldıktan sonra iletileri sayı ve sırayla güvenilir bir şekilde teslim ediyor
Burada kullanılan terimlerle ilgili ayrıntılar temel kavramlar bölümünde açıklanmıştır.
Bu kitaplık NPM'de barındırılır.
Başlarken
Şu anda desteklenen ortamlar
Önkoşullar
1. Paketi yükleyin @azure/web-pubsub-client
npm install @azure/web-pubsub-client
2. Web PubSub kaynağınıza bağlanma
İstemci, hizmete bağlanmak ve hizmetle kimlik doğrulaması yapmak için bir İstemci Erişim URL'si kullanır ve bu da desenini wss://<service_name>.webpubsub.azure.com/client/hubs/<hub_name>?access_token=<token>
izler. İstemcinin İstemci Erişim URL'sini almak için birkaç yolu olabilir. Bu hızlı başlangıç için aşağıda gösterilen Azure Portalı'ndan kopyalayıp yapıştırabilirsiniz. (Üretim için, istemcileriniz genellikle uygulama sunucunuzda genel olarak dağıtılan İstemci Erişimi URL'sini alır. Aşağıdaki ayrıntılara bakın )
Yukarıdaki diyagramda gösterildiği gibi, istemcinin "group1" adlı belirli bir gruba ileti gönderme ve gruba katılma izinleri vardır.
// Imports the client libray
const { WebPubSubClient } = require("@azure/web-pubsub-client");
// Instantiates the client object
const client = new WebPubSubClient("<client-access-url>");
// Starts the client connection with your Web PubSub resource
await client.start();
// ...
// The client can join/leave groups, send/receive messages to and from those groups all in real-time
3. Gruplara katılma
İstemcinin yalnızca katıldığı gruplardan ileti alabildiğini ve iletileri alırken mantığı belirtmek için bir geri çağırma eklemeniz gerektiğini unutmayın.
// ...continues the code snippet from above
// Specifies the group to join
let groupName = "group1";
// Registers a listener for the event 'group-message' early before joining a group to not miss messages
client.on("group-message", (e) => {
console.log(`Received message: ${e.message.data}`);
});
// A client needs to join the group it wishes to receive messages from
await client.joinGroup(groupName);
4. Gruba ileti gönderme
// ...continues the code snippet from above
// Send a message to a joined group
await client.sendToGroup(groupName, "hello world", "text");
// In the Console tab of your developer tools found in your browser, you should see the message printed there.
Örnekler
Bağlı, bağlantısı kesilmiş ve durdurulmuş olaylar için geri arama ekleme
- bir istemci Web PubSub kaynağınıza başarıyla bağlandığında,
connected
olay tetikler.
client.on("connected", (e) => {
console.log(`Connection ${e.connectionId} is connected.`);
});
- bir istemcinin bağlantısı kesildiğinde ve bağlantıyı kurtaramadığında
disconnected
, olay tetikler.
client.on("disconnected", (e) => {
console.log(`Connection disconnected: ${e.message}`);
});
- İstemcinin
stopped
bağlantısı kesildiğinde ve istemci yeniden bağlanmayı denemeyi durdurduğunda olay tetiklenir. Bu genellikle çağrıldıktan veyaautoReconnect
devre dışı bırakıldıktan veya yeniden bağlanmaya çalışırken belirtilen sınıra ulaşıldıktan sonraclient.stop()
gerçekleşir. İstemciyi yeniden başlatmak istiyorsanız durdurulan olayda öğesini çağırabilirsinizclient.start()
.
// Registers a listener for the "stopped" event
client.on("stopped", () => {
console.log(`Client has stopped`);
});
Program aracılığıyla İstemci Erişimi URL'si oluşturmak için anlaşma sunucusu kullanma
Üretimde istemciler genellikle bir uygulama sunucusundan İstemci Erişim URL'sini getirir. Sunucu, Web PubSub kaynağınızın bağlantı dizesi tutar ve sunucu kitaplığının @azure/web-pubsub
yardımıyla İstemci Erişim URL'sini oluşturur.
1. Uygulama sunucusu
Aşağıdaki kod parçacığı bir uygulama sunucusu örneğidir ve bir /negotiate
yolu kullanıma sunar ve İstemci Erişimi URL'sini döndürür.
// This code snippet uses the popular Express framework
const express = require('express');
const app = express();
const port = 8080;
// Imports the server library, which is different from the client library
const { WebPubSubServiceClient } = require('@azure/web-pubsub');
const hubName = 'sample_chat';
const serviceClient = new WebPubSubServiceClient("<web-pubsub-connectionstring>", hubName);
// Note that the token allows the client to join and send messages to any groups. It is specified with the "roles" option.
app.get('/negotiate', async (req, res) => {
let token = await serviceClient.getClientAccessToken({roles: ["webpubsub.joinLeaveGroup", "webpubsub.sendToGroup"] });
res.json({
url: token.url
});
});
app.listen(port, () => console.log(`Application server listening at http://localhost:${port}/negotiate`));
2. İstemci tarafı
Aşağıdaki kod parçacığı, istemci tarafının bir örneğidir.
const { WebPubSubClient } = require("@azure/web-pubsub-client")
const client = new WebPubSubClient({
getClientAccessUrl: async () => {
let value = await (await fetch(`/negotiate`)).json();
return value.url;
}
});
await client.start();
Bu örneğin tam kodunu görmek için samples-browser konusuna bakın.
İstemci, uygulama sunucusundan veya birleştirilmiş gruplardan gelen iletileri tüketir
İstemci, uygulama sunucunuzdan veya gruplarınızdan gelen iletileri kullanmak için geri çağırmalar ekleyebilir. Olay için group-message
istemcinin yalnızca katıldığı grup iletilerini alabileceğini lütfen unutmayın.
// Registers a listener for the "server-message". The callback will be invoked when your application server sends message to the connectionID, to or broadcast to all connections.
client.on("server-message", (e) => {
console.log(`Received message ${e.message.data}`);
});
// Registers a listener for the "group-message". The callback will be invoked when the client receives a message from the groups it has joined.
client.on("group-message", (e) => {
console.log(`Received message from ${e.message.group}: ${e.message.data}`);
});
Yeniden katılma hatasını işleme
İstemcinin bağlantısı kesildiğinde ve kurtarılamazsa, Web PubSub kaynağınızda tüm grup bağlamları temizlenir. Bu, istemci yeniden bağlandığında gruplara yeniden katılması gerektiği anlamına gelir. Varsayılan olarak, istemci seçeneği etkindir autoRejoinGroup
.
Ancak sınırlamaların autoRejoinGroup
farkında olmanız gerekir.
- İstemci yalnızca başlangıçta istemci kodu tarafından katılmış olan gruplara sunucu tarafı koduyla değil yeniden bağlanabilir.
- "Gruba yeniden katılma" işlemleri çeşitli nedenlerle başarısız olabilir; örneğin istemcinin gruplara katılma izni yoktur. Böyle durumlarda, bu hatayı işlemek için bir geri çağırma eklemeniz gerekir.
// By default autoRejoinGroups=true. You can disable it by setting to false.
const client = new WebPubSubClient("<client-access-url>", { autoRejoinGroups: true });
// Registers a listener to handle "rejoin-group-failed" event
client.on("rejoin-group-failed", e => {
console.log(`Rejoin group ${e.group} failed: ${e.error}`);
})
İşlem ve yeniden deneme
Varsayılan olarak, , client.leaveGroup()
, client.sendToGroup()
client.sendEvent()
gibi client.joinGroup()
işlemin üç yeniden denemesi vardır. aracılığıyla messageRetryOptions
yapılandırabilirsiniz. Tüm yeniden denemeler başarısız olursa bir hata oluşur. Web PubSub hizmetinin işlemi yinelenenleri kaldırması için önceki yeniden denemelerle aynı ackId
işlemi geçirerek yeniden denemeyi sürdürebilirsiniz.
try {
await client.joinGroup(groupName);
} catch (err) {
let id = null;
if (err instanceof SendMessageError) {
id = err.ackId;
}
await client.joinGroup(groupName, {ackId: id});
}
Altprotocol belirtme
İstemci tarafından kullanılacak altprotokolü değiştirebilirsiniz. Varsayılan olarak, istemci kullanır json.reliable.webpubsub.azure.v1
. veya json.webpubsub.azure.v1
kullanmayı json.reliable.webpubsub.azure.v1
seçebilirsiniz.
// Change to use json.webpubsub.azure.v1
const client = new WebPubSubClient("<client-access-url>", { protocol: WebPubSubJsonProtocol() });
// Change to use json.reliable.webpubsub.azure.v1
const client = new WebPubSubClient("<client-access-url>", { protocol: WebPubSubJsonReliableProtocol() });
Önemli kavramlar
Bağlantı
İstemci veya istemci bağlantısı olarak da bilinen bağlantı, Web PubSub'a bağlı tek bir WebSocket bağlantısını temsil eder. Başarıyla bağlanıldığında, Web PubSub tarafından bu bağlantıya benzersiz bir bağlantı kimliği atanır. Her WebPubSubClient
biri kendi özel bağlantı oluşturur.
Kurtarma
Güvenilir protokoller kullanan bir istemcinin bağlantısı kesilirse, yeni bir WebSocket kayıp bağlantının bağlantı kimliğini kullanarak kurmaya çalışır. Yeni WebSocket bağlantısı başarıyla bağlanırsa, bağlantı kurtarılır. Bir istemcinin bağlantısı kesildiği süre boyunca hizmet, istemcinin bağlamını ve istemcinin abone olduğu tüm iletileri korur ve istemci kurtarıldığında bu iletileri istemciye gönderir. Hizmet WebSocket hata kodu 1008
döndürürse veya kurtarma girişimi 30 saniyeden uzun sürerse kurtarma başarısız olur.
Yeniden bağlan
İstemci bağlantısı bırakıldığında ve kurtarılamadığında yeniden bağlantı gerçekleşir. Yeniden bağlanma yeni bir bağlantı başlatır ve yeni bağlantının yeni bir bağlantı kimliği vardır. Kurtarmadan farklı olarak, hizmet yeniden bağlanan istemciyi yeni bir istemci bağlantısı olarak kabul eder. İstemci bağlantısının gruplara yeniden katılması gerekir. Varsayılan olarak, istemci kitaplığı yeniden bağlantıdan sonra gruplara yeniden katılır.
Hub
Hub, bir dizi istemci bağlantısı için mantıksal bir kavramdır. Genellikle bir hub'ı tek bir amaçla kullanırsınız; örneğin sohbet hub'ı veya bildirim hub'ı. bir istemci bağlantısı oluşturulduğunda bir hub'a bağlanır ve kullanım ömrü boyunca bu hub'a aittir. Farklı uygulamalar, farklı hub adlarını kullanarak bir Web PubSub'ı paylaşabilir.
Grup
Grup, hub'a yönelik bağlantıların bir alt kümesidir. bir gruba istemci bağlantısı ekleyebilir veya istemci bağlantısını istediğiniz zaman gruptan kaldırabilirsiniz. Örneğin, bir istemci bir sohbet odasına katıldığında veya bir istemci sohbet odasından ayrıldığında, bu sohbet odası bir grup olarak kabul edilebilir. bir istemci birden çok gruba katılabilir ve bir grup birden çok istemci içerebilir.
Kullanıcı
Web PubSub'a Connections tek bir kullanıcıya ait olabilir. Bir kullanıcının birden çok bağlantısı olabilir, örneğin tek bir kullanıcı birden çok cihaz veya birden çok tarayıcı sekmesi arasında bağlandığında.
İstemci Ömrü
Web PubSub istemcilerinin her biri önbelleğe alınır ve uygulamanın ömrü boyunca tekil olarak kullanılır. Kayıtlı olay geri çağırmaları istemciyle aynı yaşam süresine sahip olur. Bu, geri çağırmaları istediğiniz zaman ekleyebileceğiniz veya kaldırabileceğiniz anlamına gelir ve yeniden bağlantı veya istemci durdurulduktan sonra kayıt durumu değişmez.
JavaScript Paketi
Bu istemci kitaplığını tarayıcıda kullanmak için önce bir paketleyici kullanmanız gerekir. Bunun nasıl yapılacağının ayrıntıları için lütfen paketleme belgelerimize bakın.
Sorun giderme
Günlükleri etkinleştirme
Bu kitaplığı kullanırken hata ayıklama günlüklerini almak için aşağıdaki ortam değişkenini ayarlayabilirsiniz.
export AZURE_LOG_LEVEL=verbose
Günlükleri etkinleştirme hakkında daha ayrıntılı yönergeler için @azure/günlükçü paketi belgelerine bakabilirsiniz.
Canlı İzleme
Canlı trafiği görüntülemek için Web PubSub portalından Canlı İzleme aracını kullanın.
Ek kaynaklar
İstemci izni hakkında daha fazla bilgi edinin, bkz. izinler
Katkıda bulunma
Bu kitaplığa katkıda bulunmak isterseniz, kodu derleme ve test etme hakkında daha fazla bilgi edinmek için lütfen katkıda bulunma kılavuzunu okuyun.
Azure SDK for JavaScript
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin