Python için Azure Web PubSub istemci kitaplığı

Uyarı

Burada kullanılan terimlerle ilgili ayrıntılar temel kavramlar makalesinde açıklanmıştır.

İstemci tarafı SDK'sı, geliştiricinin iş akışını hızlandırmayı amaçlar; daha ayrıntılı olarak,

  • istemci bağlantılarını yönetmeyi kolaylaştırır
  • istemciler arasında ileti göndermeyi kolaylaştırır
  • İstenmeyen istemci bağlantısı bırakıldıktan sonra otomatik olarak yeniden denenir
  • bağlantı bırakıldıktan sonra iletileri sayı ve sırayla güvenilir bir şekilde teslim ediyor

Diyagramda gösterildiği gibi, istemcileriniz Web PubSub kaynağınızla WebSocket bağlantıları kurar.

Web PubSub kaynağıyla WebSocket bağlantısı kuran istemcileri gösteren ekran görüntüsü

İlk Adımlar

Önkoşullar

1. azure-messaging-webpubsubclient paketini yükleyin

pip install azure-messaging-webpubsubclient

2. Web PubSub kaynağınıza bağlanma

İstemci, hizmetine bağlanmak ve hizmetle kimlik doğrulaması yapmak için bir kullanır Client Access URL ve bu da desenini izler wss://<service_name>.webpubsub.azure.com/client/hubs/<hub_name>?access_token=<token>. bir istemcinin elde etmek için Client Access URLbirkaç yolu olabilir. Bu hızlı başlangıç için, gösterilen Azure portalından kopyalayıp yapıştırabilirsiniz.

Azure portalında İstemci Erişim Url'sini alma işlemini gösteren ekran görüntüsü

Diyagramda gösterildiği gibi, istemciye ileti gönderme ve adlı group1belirli bir gruba katılma izinleri vardır.

from azure.messaging.webpubsubclient import WebPubSubClient

client = WebPubSubClient("<client-access-url>")
with client:
    # The client can join/leave groups, send/receive messages to and from those groups all in real-time
    ...

3. Gruplara katılma

İstemci yalnızca katıldığı gruplardan ileti alabilir ve iletileri alırken mantığı belirtmek için bir geri çağırma eklemeniz gerekir.

from azure.messaging.webpubsubclient.models import CallbackType

# ...continues the code snippet from above

# Registers a listener for the event 'group-message' early before joining a group to not miss messages
group_name = "group1";
client.subscribe(CallbackType.GROUP_MESSAGE, lambda e: print(f"Received message: {e.data}"));

# A client needs to join the group it wishes to receive messages from
client.join_group(groupName);

4. Gruba ileti gönderme

# ...continues the code snippet from above

# Send a message to a joined group
client.send_to_group(group_name, "hello world", "text");

# In the Console tab of your developer tools found in your browser, you should see the message printed there.

Örnekler

ve stopped olayları için connecteddisconnected geri çağırmalar ekleme

  1. Bir istemci Web PubSub kaynağınıza başarıyla bağlandığında, connected olayı tetikler.

    from azure.messaging.webpubsubclient.models import CallbackType
    
    client.subscribe(CallbackType.CONNECTED, lambda e: print(f"Connection {e.connection_id} is connected"))
    
  2. İstemcinin bağlantısı kesildiğinde ve bağlantı kurtarılamıyorsa, disconnected olayı tetikler.

    from azure.messaging.webpubsubclient.models import CallbackType
    
    client.subscribe(CallbackType.DISCONNECTED, lambda e: print(f"Connection disconnected: {e.message}"))
    
  3. İstemci stopped bağlantısı kesildiğinde ve istemci yeniden bağlanmaya çalışmayı durdurduğunda olay tetikleniyor. Bu durum genellikle client.stop() çağrıldıktan veya auto_reconnect devre dışı bırakıldıktan veya yeniden bağlanmaya çalışmak için belirtilen sınıra ulaşıldıktan sonra gerçekleşir. İstemciyi yeniden başlatmak istiyorsanız durdurulan olayda client.start() çağırabilirsiniz.

    from azure.messaging.webpubsubclient.models import CallbackType
    
    client.subscribe(CallbackType.STOPPED, lambda : print("Client has stopped"))
    

İ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. Unutmayın, olay için group-message istemci yalnızca katıldığı grup iletilerini alabilir.

from azure.messaging.webpubsubclient.models import CallbackType

# Registers a listener for the "server-message". The callback is invoked when your application server sends message to the connectionID, to or broadcast to all connections.
client.subscribe(CallbackType.CONNECTED, lambda e: print(f"Received message {e.data}"))

# Registers a listener for the "group-message". The callback is invoked when the client receives a message from the groups it has joined.
client.subscribe(CallbackType.GROUP_MESSAGE, lambda e: print(f"Received message from {e.group}: {e.data}"))

Yeniden katılma hatasını işleme

İstemcinin bağlantısı kesildiğinde ve kurtarılamadığında, 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, istemcide auto_rejoin_groups seçeneği etkindir.

Ancak, auto_rejoin_groupssınırlamalarını bilmeniz gerekir.

  • İstemci yalnızca başlangıçta istemci kodu tarafından katılmış olan gruplara sunucu tarafı koduyla değil yeniden katılabiliyor.
  • "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.
from azure.messaging.webpubsubclient.models import CallbackType

# By default auto_rejoin_groups=True. You can disable it by setting to False.
client = WebPubSubClient("<client-access-url>", auto_rejoin_groups=True);

# Registers a listener to handle "rejoin-group-failed" event
client.subscribe(CallbackType.REJOIN_GROUP_FAILED, lambda e: print(f"Rejoin group {e.group} failed: {e.error}"))

İşlem ve yeniden deneme

Varsayılan olarak, client.join_group(), client.leave_group(), client.send_to_group(), client.send_event() gibi işlem üç yeniden denemeye sahiptir. Anahtar sözcük bağımsız değişkenleri aracılığıyla yapılandırabilirsiniz. Tüm yeniden denemeler başarısız olursa bir hata oluşur. Web PubSub hizmetinin işlemi yinelenenleri kaldırabilmesi için önceki yeniden denemelerle aynı ack_id geçirerek yeniden denemeye devam edebilirsiniz.

try:
    client.join_group(group_name)
except SendMessageError as e:
    client.join_group(group_name, ack_id=e.ack_id)

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

Web PubSub kaynağınız aracılığıyla canlı ileti trafiğini incelemek için Azure portalındaki Canlı İzleme aracını kullanın.