SSE Giriş
SSE, Sunucu tarafından Gönderilen Olaylar anlamına gelir; bu kelimenin tam anlamıyla sunucunun istemciye bilgi gönderdiği anlamına gelir. SSE tek yönlü bir kanaldır,Sunucu yalnızca istemciye bilgi gönderebilirİstemci SSE isteğini ancak ilk tetiklendikten sonra alabilir ve yanıt veremez.
SSE'nin temel özellikleri şunlardır:
- Kullanım kolaylığı: SSE, düz metin, JSON gibi metin tabanlı veri formatlarını kullanır; bu da veri göndermeyi ve ayrıştırmayı nispeten kolaylaştırır.
- Tek yönlü iletişim: SSE, sunucu ile istemci arasında tek yönlü iletişimi destekler; sunucu veriyi aktif olarak istemciye iletebilirken, istemci sadece veriyi alabilir.
- Gerçek zaman: SSE, uzun vadeli bağlantılar kurarak sunucuların verileri müşterilere gerçek zamanlı olarak sık istek olmadan göndermesini sağlar.
SSE vs. WebSocket
WebSocket, gerçek zamanlı iki yönlü iletişimi mümkün kılan bir diğer web teknolojisidir ve SSE'den bazı açılardan farklıdır. İşte SSE ile WebSocket arasında bir karşılaştırma:
- Veri itme yönü: SSE, sunucu ile istemci arasında tek yönlü bir iletişimdir ve sunucu verileri aktif olarak istemciye itebilir. WebSocket ise çift yönlü iletişim olup, sunucu ile istemci arasında gerçek zamanlı iki yönlü veri alışverişi sağlar.
- Bağlantı Kurulumu: SSE, sıradan HTTP istekleri ve yanıtları aracılığıyla bağlantı kurmak için uzun HTTP tabanlı bağlantılar kullanır, böylece gerçek zamanlı veri itişi sağlanır. WebSocket'ler, WebSocket bağlantıları kurarak iki yönlü iletişimi mümkün kılmak için özel protokoller kullanır.
- Uyumluluk: SSE HTTP protokolüne dayandığı için çoğu modern tarayıcıda kullanılabilir ve ek protokol yükseltmeleri gerektirmez. WebSocket'ler modern tarayıcıların büyük çoğunluğunda da desteklenir, ancak bazı özel ağ ortamlarında sorun yaratabilirler.
- Uygulanabilir senaryolar: SSE, sunucunun verileri müşteriye gerçek zamanlı olarak ilettiği durumlar için uygundur; örneğin hisse fiyatı güncellemeleri, haber gerçek zamanlı push vb. WebSocket, sohbet uygulamaları ve çok kişilik işbirlikçi düzenleme gibi gerçek zamanlı iki yönlü iletişim gerektiren senaryolar için uygundur.
- Özel iş ihtiyaçlarınıza ve senaryolarınıza bağlı olarak, SSE veya WebSocket seçimi gerçek ihtiyaçlarınıza bağlıdır. Eğer sadece bir sunucuya ihtiyacı varsa ve verileri istemcilere tek bir yönde aktarmak istiyorsanız ve basit ve uyumlu tutmak istiyorsanız, SSE iyi bir seçimdir. İki yönlü iletişim sağlamak istiyorsanız veya daha gelişmiş özellikler ve kontrol istiyorsanız, WebSocket ihtiyaçlarınıza daha uygun olabilir.
SSE etkinlik akışı formatı
Olay akışı, UTF-8 formatında kodlanması gereken basit bir metin veri akışıdır. etkinlik akışıMesaj, bir çift satır kesimiyle ayrılmıştır。 Iki nokta ile başlayan davranış yorum satırları göz ardı edilir. Her alan bir alan adı, ardından iki nokta ve ardından o alanın değeri için metin verileriyle gösterilir.
Alanlar şunlardır:
olay: Olay türünü tanımlamak için kullanılan bir dize. Bu dizi belirtilirse, tarayıcı belirtilen olay adıyla bir etkinliği uygun dinleyiciye gönderir; İstemci, belirtilen olayı dinlemek için addEventListener() kullanmalıdır. Bir mesaj olay adını belirtmiyorsa, onmessage handler çağrılabilir.
veri: Mesajın veri alanı. EventSource, data:'dan başlayan ardışık birden fazla satır aldığında, bunları birleştirir ve aralarına bir satır sarası ekler. Uçtaki satır kesintisi kaldırılır.
Kimliği: Event ID, mevcut EventSource nesnesinin iç özelliği olan "Son Olay Kimliği"nin özellik değeri olur.
Yeni -den deneme: yeniden bağlantı kurma zamanı. Sunucuya bağlantı kaybedilirse, tarayıcı belirtilen süreyi bekler ve sonra yeniden bağlanmaya çalışır. Bu, yeniden bağlanma süresini milisaniyeler cinsinden belirten bir tam sayı olmalıdır. Tam sayı olmayan bir değer belirtilirse, alan göz ardı edilir.
EventSource örneği
EventSource arayüzü, web içeriği ile sunucu arasındaki etkinlikleri göndermek için kullanılan arayüzdür.
EventHandler özelliği
EventSource.onopen, bağlantı açıkken çağrılır. EventSource.onmessage, bir mesajın etkinlik özdeniteliği olmadan alındığında çağrılır. EventSource.onerror, bağlantı istisnaları üzerine çağrılır.
SSE Server (ASP.NET Core)
.NET 8 ile yeni bir ASP.NET Core projesi oluşturun ve denetleyici kodu şu şekildedir:
Bağlantıyı kuran istemci için, her saniye aralıkta bir istemciye mesaj gönderin.
SSE istemcisi
Görünüm sayfasında html ve js kullanarak istemci kodu aşağıdaki gibi yazın:
Projeye aşağıdaki etkilerle başlayın:
Referans:
Bağlantı girişi görünür.
Bağlantı girişi görünür.
Bağlantı girişi görünür. |