﻿
{"id":17651,"date":"2020-09-04T22:28:22","date_gmt":"2020-09-04T22:28:22","guid":{"rendered":"https:\/\/www.gencayyildiz.com\/blog\/?p=17651"},"modified":"2020-09-04T22:28:22","modified_gmt":"2020-09-04T22:28:22","slug":"asp-net-core-signalr-serisi-1-signalr-nedir-nasil-calisir","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/asp-net-core-signalr-serisi-1-signalr-nedir-nasil-calisir\/","title":{"rendered":"Asp.NET Core &#8211; SignalR Serisi #1 &#8211; SignalR Nedir? Nas\u0131l \u00c7al\u0131\u015f\u0131r?"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Bu i\u00e7eri\u011fimizde <a href=\"https:\/\/www.gencayyildiz.com\/blog\/asp-net-core-signalr-yazi-serisi\/\" rel=\"noopener noreferrer\" target=\"_blank\">Asp.NET Core \u2013 SignalR Yaz\u0131 Serisi<\/a>nin ilk makalesini kaleme alacak ve SignalR&#8217;\u0131n ne oldu\u011funu ve nas\u0131l bir \u00e7al\u0131\u015fma mekanizmas\u0131na sahip oldu\u011funu teorik olarak detayl\u0131ca inceleyece\u011fiz.<\/p>\n<p>Her\u015feyden \u00f6nce bundan 5 bilemedin 6 y\u0131l \u00f6nce <a href=\"https:\/\/www.gencayyildiz.com\/blog\/asp-net-mvc-5-ve-signalr-ile-chat-uygulamasi\/\" rel=\"noopener noreferrer\" target=\"_blank\">Asp.NET MVC 5 ve SignalR \u0130le Chat Uygulamas\u0131<\/a> ba\u015fl\u0131kl\u0131 makalemde SignalR&#8217;\u0131n ne oldu\u011funu hasbel kadar(asl\u0131nda yeterince) incelemi\u015ftik. Bu i\u00e7eri\u011fimizde ise mevzu bahis bir yaz\u0131 serisi oldu\u011fundan dolay\u0131 ilgili konu tekrar teorik temelleriyle ele al\u0131nacak ve yer yer referans edilen makaleden al\u0131nt\u0131lar yap\u0131larak ilerlenecektir. Tabi ki de serinin her bir makalesi nihai olarak olay\u0131 b\u00fct\u00fcnsel a\u00e7\u0131dan ele al\u0131p, g\u00f6rmemizi sa\u011flayacak birer par\u00e7a g\u00f6revi g\u00f6rece\u011finden dolay\u0131 konuya dair \u015fu ana kadar olabilecek en detayl\u0131 ve anla\u015f\u0131l\u0131r metinsel bir kaynak \u00fcretmeyi hedeflemekteyiz.<\/p>\n<p>Velhas\u0131l-\u0131 kelam bu a\u00e7\u0131klamalardan sonra ilk ad\u0131m\u0131 SignalR&#8217;\u0131n ne oldu\u011funa de\u011finerek atabiliriz \ud83d\ude42<\/p>\n<h3 style=\"color: #e83e8c;\">SignalR Nedir?<\/h3>\n<p>Normal bir web yaz\u0131l\u0131m\u0131, klasik olarak Client ile Server aras\u0131nda kullan\u0131c\u0131dan gelen talebe\/request kar\u015f\u0131l\u0131k, Server taraf\u0131ndan verilen tepki\/cevap\/response ili\u015fkisi \u00fczerinden e\u015fzamanl\u0131 olarak haberle\u015fmektedir. Lakin bu durum hepimizinde y\u0131llarca deneyimledi\u011fi gibi bir bekleme s\u00fcreci yahut sayfan\u0131n gidip gelmesiyle sonu\u00e7lanmakta ve b\u00f6ylece kullan\u0131c\u0131 a\u00e7\u0131s\u0131ndan zamansal maliyetle birlikte, deneyim a\u00e7\u0131s\u0131ndan g\u00fcn\u00fcm\u00fcze yak\u0131\u015fmayan ilkelli\u011fe alamet etmektedir. \u015e\u00f6yle bi d\u00fc\u015f\u00fcn\u00fcrsek e\u011fer; \u00fclke genelinde yap\u0131lan se\u00e7imin sonu\u00e7lar\u0131n\u0131 anl\u0131k olarak takip eden bir web yaz\u0131l\u0131m\u0131n\u0131n beslendi\u011fi kayna\u011fa gelen verileri dinamik olarak yorumlay\u0131p g\u00f6stermesi gerekirken, burada g\u00fcncel verileri g\u00f6rebilmesi i\u00e7in kullan\u0131c\u0131dan sayfay\u0131 yenilemesini istemek sizce ne kadar modern bir hizmet olacakt\u0131r? Ya da g\u00fcn\u00fcm\u00fcz\u00fcn imtihan\u0131 Covid-19(nam-\u0131 de\u011fer Korona Vir\u00fcs) verilerini yay\u0131nlad\u0131\u011f\u0131n\u0131z g\u00fcncel bir web uygulamas\u0131n\u0131n anl\u0131k olarak girilen verilerinin grafiksel olarak an\u0131nda yans\u0131t\u0131ld\u0131\u011f\u0131n\u0131 tahayy\u00fcl ederseniz, klasik web yakla\u015f\u0131m\u0131n\u0131n(request\/response) bu s\u00fcre\u00e7te ne kadar efektif bir rol \u00fcstlenebildi\u011fini s\u00f6yleyebilirsiniz&#8230;<\/p>\n<p>G\u00fcn\u00fcm\u00fcz ihtiya\u00e7lar\u0131n\u0131 de\u011ferlendirirsek e\u011fer klasik web yakla\u015f\u0131m\u0131n\u0131n tek ba\u015f\u0131na pek yeterli olmad\u0131\u011f\u0131 ve \u00e7\u00f6z\u00fcm olarak farkl\u0131 k\u00fct\u00fcphanelere ve hatta protokollere ihtiyac\u0131m\u0131z oldu\u011fu ve olunaca\u011f\u0131 konusunda ka\u00e7\u0131n\u0131lmaz olarak hem fikir oldu\u011fumuz kanaatindeyim. Misal, yukar\u0131da s\u00f6z gelimi verilen \u00f6rneklerde hayali tasarlanan web uygulamalar\u0131n\u0131n ideal olarak Real Time bir hizmet vermesi yerinde olacak ve bunun i\u00e7in HTTP&#8217;den farkl\u0131 olarak TCP protokolon\u00fc benimseyen Websocket altyap\u0131l\u0131 sistemler yahut k\u00fct\u00fcphanelerin kullan\u0131lmas\u0131 gerekecektir. <span style=\"font-size:9px;\">(WebSocket hakk\u0131nda daha teferruatl\u0131 bilgi edinmek i\u00e7in <a href=\"https:\/\/www.gencayyildiz.com\/blog\/node-js-websocket-nedir-nasil-kullanilir\/\" rel=\"noopener noreferrer\" target=\"_blank\">Websocket Nedir?<\/a> ba\u015fl\u0131kl\u0131 yaz\u0131y\u0131 inceleyebilirsiniz)<\/span><\/p>\n<p>Asp.NET(Core) mimarisi WebSocket programlayabilmek i\u00e7in bir\u00e7ok farkl\u0131 k\u00fct\u00fcphane bar\u0131nd\u0131rmaktad\u0131r. Bunlardan en pop\u00fcler ve community(topluluk)&#8217;si en geni\u015f olan\u0131 SignalR&#8217;d\u0131r.<\/p>\n<blockquote><p><em style=\"color:orange;\">SignalR, web uygulamalar\u0131na Real Time fonksiyonellik kazand\u0131ran bir Open Source k\u00fct\u00fcphanedir.<\/em><\/p><\/blockquote>\n<p>Nas\u0131l ki; <a href=\"https:\/\/www.gencayyildiz.com\/blog\/event-driven-non-blocking-ve-node-js-nedir\/\" rel=\"noopener noreferrer\" target=\"_blank\">Node.JS<\/a>&#8216;de <a href=\"https:\/\/www.gencayyildiz.com\/blog\/node-js-websocket-nedir-nasil-kullanilir\/\" rel=\"noopener noreferrer\" target=\"_blank\">Socket.IO<\/a> yahut <a href=\"https:\/\/www.python.org\/\" rel=\"noopener noreferrer\" target=\"_blank\">Python<\/a>&#8216;da <a href=\"https:\/\/websockets.readthedocs.io\/en\/stable\/intro.html\" rel=\"noopener noreferrer\" target=\"_blank\" class=\"broken_link\">WebSockets<\/a> onca k\u00fct\u00fcphaneye nazaran r\u00fc\u015ftlerini ispatlam\u0131\u015flarsa, Asp.NET(Core)&#8217;de de SignalR kendisini ispatlam\u0131\u015ft\u0131r.<\/p>\n<p><em><strong>Peki&#8230; SignalR, yap\u0131sal olarak nas\u0131ld\u0131r?<\/strong><\/em><\/p>\n<p>SignalR alt\u0131nda yatan teknoloji esas\u0131nda WebSocket&#8217;tir. WebSocket, client ile server aras\u0131nda iki y\u00f6nli ileti\u015fimi sa\u011flayan bir protokold\u00fcr. E\u011fer bir yerde protokol kelimesi ge\u00e7iyorsa orada bir kurallar b\u00fct\u00fcn\u00fc var demektir. Protokol, iki farkl\u0131 sistemin birbiriyle nas\u0131l haberle\u015fece\u011fini belirleyen kurallar b\u00fct\u00fcn\u00fcd\u00fcr. SignalR, bu kurallar \u00e7er\u00e7evesinde client ile server&#8217;\u0131 haberle\u015ftirmekte ve ili\u015fki y\u00f6n\u00fcn\u00fc sadece client->server&#8217;dan alarak server->client olacak \u015fekilde desteklemekte ve RPC(Remote Procedure Call &#8211; Uzak Yordam \u00c7a\u011fr\u0131s\u0131)&#8217;yi benimsemektedir.<\/p>\n<blockquote><p><em style=\"color:blue;\">RPC, server taraf\u0131ndan client&#8217;ta bulunan herhangi bir metodun(JS) tetiklenmesini sa\u011flayan bir protokold\u00fcr.<\/em><\/p><\/blockquote>\n<p>B\u00f6ylece RPC sayesinde uygulamalar server&#8217;dan sayfay\u0131 yenilemeksizin data transferini sa\u011flam\u0131\u015f olacak ve ger\u00e7ek zamanl\u0131 uygulama davran\u0131\u015f\u0131 sergileyecektirler. Uygulaman\u0131n ger\u00e7ek zamanl\u0131 olmas\u0131 client ile server&#8217;\u0131n anl\u0131k olarak kar\u015f\u0131l\u0131kl\u0131 haberle\u015fmesi anlam\u0131na gelmektedir.<\/p>\n<p><em><strong>SignalR ge\u00e7mi\u015fi nas\u0131l seyreder?<\/strong><\/em><\/p>\n<p>\u00c7o\u011fu k\u00fct\u00fcphaneye nazaran k\u00f6kl\u00fc bir ge\u00e7mi\u015fe sahiptir. Microsoft taraf\u0131ndan 2011 y\u0131l\u0131nda geli\u015ftirilmi\u015f, 2013 y\u0131l\u0131nda Asp.NET mimarisine entegre edilmi\u015ftir. Tabi o y\u0131llardaki t\u00fcm browserlar\u0131n WebSocket protokol\u00fcn\u00fc desteklememesi \u00fczerine SignalR&#8217;\u0131n kendi altyap\u0131s\u0131yla gelerek client ile server aras\u0131ndaki haberle\u015fmeyi real time olarak ger\u00e7ekle\u015ftirebiliyor olmas\u0131 bir anda pop\u00fclerli\u011fine ve kullan\u0131c\u0131 yo\u011funlu\u011funa art\u0131 olarak yans\u0131m\u0131\u015ft\u0131r. Tabi ki WebSocket destekleyen taray\u0131c\u0131larda ise ilgili taray\u0131c\u0131n\u0131n bu deste\u011fini kullanmaktan da geri durmamaktad\u0131r.<\/p>\n<blockquote><p><em style=\"color:purple;\">SignalR; k\u0131sa zamanda, az kodla Real Time uygulamalar geli\u015ftirmemizi sa\u011flayan bir k\u00fct\u00fcphanedir.<\/em><\/p><\/blockquote>\n<h3 style=\"color: #e83e8c;\">SignalR Nas\u0131l \u00c7al\u0131\u015f\u0131r?<\/h3>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/09\/Asp.NET-Core-SignalR-Serisi-1-SignalR-Nedir-Nasil-Calisir.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/09\/Asp.NET-Core-SignalR-Serisi-1-SignalR-Nedir-Nasil-Calisir-300x193.png\" alt=\"Asp.NET Core - SignalR Serisi #1 - SignalR Nedir? Nas\u0131l \u00c7al\u0131\u015f\u0131r?\" width=\"300\" height=\"193\" class=\"alignleft size-medium wp-image-17688\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/09\/Asp.NET-Core-SignalR-Serisi-1-SignalR-Nedir-Nasil-Calisir-300x193.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/09\/Asp.NET-Core-SignalR-Serisi-1-SignalR-Nedir-Nasil-Calisir.png 495w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><br \/>\nSignalR&#8217;\u0131n kalbinde &#8216;Hub&#8217; denilen bir merkezi yap\u0131 vard\u0131r. &#8216;Hub&#8217; i\u00e7erisinde tan\u0131mlanan metoda subscribe(abone) olan t\u00fcm client&#8217;lar ilgili Hub \u00fczerinden iletilen mesaj\u0131 alacakt\u0131r. Yandaki \u015femada g\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere bir client taraf\u0131ndan g\u00f6nderilen herhangi bir mesaj yahut data uygun mant\u0131kta ili\u015fkisel t\u00fcm client&#8217;lara g\u00f6nderilecektir. Ve buradaki bildiriyi Hub y\u00fcr\u00fctecektir.<\/p>\n<p>Tabi ki de sonraki yaz\u0131lar\u0131m\u0131zda Hub \u00fczerinden tan\u0131mlanm\u0131\u015f gruplara yahut tek bir client&#8217;a mesaj g\u00f6nderilebildi\u011finden bahsedecek ve pratiksel olarak inceleyece\u011fiz. \u015eimdilik teorik olarak konunun genel hatlar\u0131n\u0131 \u00e7izmi\u015f bulunmaktay\u0131z ve burada teorik olarak san\u0131r\u0131m noktay\u0131 koymal\u0131y\u0131z \ud83d\ude42<\/p>\n<p>Sonraki i\u00e7eriklerimizde SignalR teknolojisinin hem server hem de client \u00fczerindeki in\u015fa s\u00fcrelerinin nas\u0131l icra edildiklerini pratik olarak tek tek inceleyece\u011fiz.<\/p>\n<p>O halde \u015fimdilik g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<\/p>\n<p>\u0130lgilenenlerin faydalanmas\u0131 dile\u011fiyle&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar&#8230;<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Merhaba, Bu i\u00e7eri\u011fimizde Asp.NET Core \u2013 SignalR Yaz\u0131 Serisinin ilk makalesini kaleme alacak ve SignalR&#8217;\u0131n ne oldu\u011funu ve nas\u0131l bir \u00e7al\u0131\u015fma mekanizmas\u0131na sahip oldu\u011funu teorik olarak detayl\u0131ca inceleyece\u011fiz. Her\u015feyden \u00f6nce bundan 5 bilemedin 6&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":17653,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3760],"tags":[3762,3765,3764,639,3763,3761,3766],"class_list":["post-17651","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-signalr","tag-asp-net-core-signalr","tag-remote-procedure-call","tag-rpc","tag-signalr","tag-signalr-nasil-calisir","tag-signalr-nedir","tag-uzak-yordam-cagrisi"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/17651","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=17651"}],"version-history":[{"count":39,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/17651\/revisions"}],"predecessor-version":[{"id":17696,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/17651\/revisions\/17696"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/17653"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=17651"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=17651"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=17651"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}