SignalR Core Nedir? Nasıl Çalışır?

Yunus Emre KAŞ
Kodcular
Published in
4 min readOct 18, 2019

Herkese merhabalar, React ile JWT kullanarak SignalR Core ile nasıl iletişim kurulur serisinin üçüncü kısmında SignalR Core nedir? Nasıl çalışır ? konularını açıklamaya çalışacağım. Serinin bir önceki yazısına buradan ulaşabilirsiniz:

Konumuzun alt başlıkları şöyle olacaktır:

  • SignalR Core nedir?
  • Nerelerde kullanırız ?
  • Nasıl çalışır ?
  • Veri Transfer Tipleri
  • Hubs
  • Avantajları

SignalR Core Nedir ?

SignalR, gerçek zamanlı uygulamalar oluşturabileceğiniz açık kaynaklı bir kütüphanedir. İçerisinde sunucu tarafından, istemci tarafındaki bir kodu çalıştırabilmemize olanak sağlayan API lar bulundurur.

Nerelerde Kullanırız ?

Verilerin hızlı ve eş zamanlı transferini istediğimiz yerlerde kullanabiliriz.

Örnek olarak:

  • Oyunlar
  • Sosyal Medya(yorumlar, mesajlaşma, bildirim)
  • Açık Arttırma
  • Oylama
  • Finansal işlemler

SignalR Core Nasıl Çalışır?

“Sunucu tarafından, istemci tarafındaki bir javascript kodunu çalıştırabilmemize olanak sağlar” sözünü birazcık açalım. Normal bir senaryoda istemci sunucuya bir HTTP Request atar, sunucu isteği işler ve istemciye Response döner. Ama SignalR da öyle olmuyor. Oluyor da tam öyle değil. 😂 Peki nasıl oluyor ?

İstemci sunucuya bir HTTP Request atar, SignalR bu isteği işleyerek varsayılan olarak en ideal transfer tipini belirler. Eğer sunucu ve istemci Websocket destekliyorsa transfer yöntemi olarak Websocket protokolü seçilir. Çünkü SignalR transfer yöntemleri içinde en iyisi Websocket yöntemidir.

Peki diyelim ki sunucumuz yada tarayıcımız Websocket’i desteklemiyor o zaman ne olacak ? SignalR kullanamayacak mıyım ?

SignalR: Dur daha bitmedi yeğenim. Sen önce bir bağlantı tiplerini gör.

SignalR Core Veri Transfer Tipleri (Transports)

SignalR Core da 3 farklı transfer tipi vardır bunlar sırasıyla biraz bahsettiğimiz WebSocket, Server-Sent Events ve Long Polling yöntemleridir.

SignalR Core varsayılan olarak en iyi transfer tipini bulmak için yukarıdaki yöntemleri sırasıyla deneyerek ilerler başarılı olan en iyi yöntemi bulduğunda bağlantıyı bu transfer yöntemi üzerinden kurar. Modern tarayıcıların çoğu SignalR için en iyi yöntem olan Websocketi desteklemektedir.

WebSocket Nedir ? Nasıl Çalışır?

İstemci ve sunucu arasında TCP üzerinden bi-directional(iki yönlü) veri transferi yapabileceğiniz bir protokolüdür. JWT gibi o da bir RFC6455 standartıdır. Websocket, Handshake(El sıkışma/Anlaşma) ve Data Transfer(Veri Transferi) olarak iki bölümde incelenir.

Yukarıdan da anlaşılacağı gibi ilk isteğimiz HTTP Request olarak gönderilir. Bu ilk istek ve bağlantının yükseltilmesi işlemine Handshake adı verilir. İstemci tarafından gönderilen bir handshake isteğinin görünüşü:

GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Origin: http://example.com
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13

Sunucu tarafından gönderilen bir handshake cevabının görünüşü

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Sec-WebSocket-Protocol: chat

Websocket bağlantıları ws (WebSocket) vewss (WebSocket Secure/SSL) URI şemaları üzerinden yapılır.

Eğer şartlar uygun ise bağlantı yükseltilerek ws bağlantısına dönüşür. Böylece sunucu ile istemci arasında TCP üzerinden iki yönlü asenkron bir transfer yolu oluşur.

Websocket bağlantısı için gerekenler

WebSocket, sunucunun Windows Server 2012 veya Windows 8 ve .NET Framework 4.5 kullanmasını gerektirir. Modern tarayıcıların son sürümleri genel olarak Websocket bağlantılarını kabul eder. Detaylı bilgi için.

Server-Sent Events Nasıl Çalışır ?

Bu tipte ise istemci sunucuya bir istek atar, sunucu ise geriye Content-Type: text/event-stream içeren bir response döner. Bağlantı bu şekilde oluşmuş olur. Event-stream sunucuyu dinlemeye başlar. Sunucudan oluşan bir olaylar Event-stream üzerinden yayınlanır. Sizde Javascript üzerinden EventSource objesi ile verileri çekebilirsiniz. Daha detaylı bilgi için.

Long Polling Nasıl Çalışır ?

Bu yöntem ise tam çakallık örneği. İstemci bir istek attığı zaman sunucu bu isteği alır ve herhangi bir değişiklik olana kadar bekletir. İstediği veride herhangi bir değişiklik olduğu anda son halini istemciye döner. İstemci durur mu yapıştırır yeni bir istek durmak yok, çalış koçum der.

“La bu sunucu size ne etti gardaş ?” diyebileceğiniz bir yöntemdir.

Hubs

SignalR, istemci ve sunucu arasındaki iletişimini hubs(merkezler) üzerinden yapar. Hub ise sunucu ve istemci birbirlerinin metotlarını kullanabilmesini sağlayan high-level bir pipeline dır. Bu metotlarda parametre ve model binding özellikleri kullanabilirsiniz. SignalR iki yerleşik hub protokolü sağlar: JSON’a dayalı bir metin protokolü ve MessagePack’e dayalı bir binary protokol. MessagePack genellikle JSON ile karşılaştırıldığında daha küçük mesajlar oluşturur.

Tarayıcılar, MessagePack protokol desteği sağlamak için XHR seviye 2'yi desteklemelidir.

Avantajları

  • Veri transfer tipini otomatik seçer
  • .Net üzerinde olduğu için anlaması ve yazması kolaydır
  • Açık kaynak olduğu için gelişime sürekli açık
  • Eski SignalR gibi JQuery kullanmaz bu yüzden de yalındır

Benden bu kadar diyorum ve yazıma burada son veriyorum. Serinin bir sonraki yazısı, ASP.Net Core 3.0 üzerinde SignalR nasıl kullanılır üzerine olacak. Umarım faydalı bir yazı olmuştur. Görüş ve önerileriniz için bana Linkedin’den ulaşabilirsiniz.

Serinin en başından başlamak isterseniz :

--

--