﻿
{"id":10104,"date":"2019-01-01T20:21:42","date_gmt":"2019-01-01T20:21:42","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=10104"},"modified":"2019-01-01T20:21:42","modified_gmt":"2019-01-01T20:21:42","slug":"node-js-broadcast-komutuyla-coklu-erisim-islemleri","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/node-js-broadcast-komutuyla-coklu-erisim-islemleri\/","title":{"rendered":"Node.js \u2013 Broadcast Komutuyla \u00c7oklu Eri\u015fim \u0130\u015flemleri"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Bir \u00f6nceki <a href=\"http:\/\/www.gencayyildiz.com\/blog\/node-js-websocket-nedir-nasil-kullanilir\/\" rel=\"noopener\" target=\"_blank\">Node.js \u2013 Websocket Nedir? Nas\u0131l Kullan\u0131l\u0131r?<\/a> ba\u015fl\u0131kl\u0131 makalemde, Node.js teknolojisi \u00e7er\u00e7evesinde Websocket&#8217;in ne oldu\u011funa ve nas\u0131l kullan\u0131ld\u0131\u011f\u0131na detayl\u0131ca de\u011finmi\u015f olduk. Bu i\u00e7eri\u011fimizde ise websocket ile olu\u015fturulan TCP ba\u011flant\u0131s\u0131na ba\u011fl\u0131 t\u00fcm clientlara <strong>broadcast<\/strong> komutuyla mesaj g\u00f6ndererek \u00e7oklu eri\u015fim i\u015fleminin nas\u0131l yap\u0131laca\u011f\u0131n\u0131 inceleyece\u011fiz.<\/p>\n<p>\u00d6ncelikle broadcast olay\u0131n\u0131n ne oldu\u011fundan yola \u00e7\u0131kal\u0131m. Broadcast; server&#8217;a ba\u011fl\u0131 olan t\u00fcm clientlar aras\u0131nda bir haberle\u015fme a\u011f\u0131 sa\u011flayan yahut ileti\u015fim ba\u011f\u0131 olu\u015fturulmas\u0131n\u0131 belirten \u00f6zel bir adrestir. E\u011fer ki bir mesaj; bir client taraf\u0131ndan broadcast \u00fczerinden g\u00f6nderilmi\u015fse, o TCP ba\u011flant\u0131s\u0131na ba\u011fl\u0131 olan t\u00fcm clientlara iletilecektir.<\/p>\n<p>\u015eimdi konuyu \u00f6rneklendirebilmek i\u00e7in a\u015fa\u011f\u0131daki yap\u0131lanmay\u0131 inceleyiniz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nconst http = require(&quot;http&quot;);\r\nconst socket = require(&quot;socket.io&quot;);\r\n\r\nconst server = http.createServer((request, response) =&gt; {\r\n     response.end(&quot;...&quot;);\r\n});\r\n\r\nserver.listen(1234, () =&gt; console.log(&quot;Yay\u0131n ba\u015flad\u0131...&quot;));\r\nconst io = socket.listen(server);\r\nio.on(&quot;connection&quot;, client =&gt; {\r\n     console.log(`Client ba\u011fland\u0131. Client id : ${client.id}`);\r\n     client.on(&quot;disconnect&quot;, () =&gt; console.log(`Ba\u011flant\u0131 kesildi. Client id : ${client.id}`));\r\n     client.on(&quot;login&quot;, data =&gt; client.emit(&quot;message&quot;, data));\r\n});\r\n<\/pre>\n<p>Burada bir socket a\u00e7\u0131lmakta ve server TCP ba\u011flant\u0131s\u0131 ile dinlenmektedir. Sockete ba\u011flanan client taraf\u0131ndan olu\u015fturulan &#8220;login&#8221; olay\u0131 dinlenmekte ve tetiklenme durumunda &#8220;message&#8221; olay\u0131 yarat\u0131lmaktad\u0131r.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n&lt;html&gt;\r\n&lt;head&gt;\r\n     &lt;script src=&quot;https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jquery\/3.3.1\/jquery.min.js&quot;&gt;&lt;\/script&gt;\r\n     &lt;script src=&quot;https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/socket.io\/2.2.0\/socket.io.js&quot;&gt;&lt;\/script&gt;\r\n     &lt;script&gt;\r\n          $(() =&gt; {\r\n               const socket = io.connect(&quot;http:\/\/localhost:1234&quot;);\r\n               $(&quot;#btnLogin&quot;).click(() =&gt; socket.emit(&quot;login&quot;, { name: $(&quot;#txtName&quot;).val() }));\r\n               socket.on(&quot;message&quot;, data =&gt; $(&quot;#message&quot;).append(`&lt;li&gt;${data.name} ba\u011flant\u0131 sa\u011flad\u0131.&lt;\/li&gt;`));\r\n          });\r\n     &lt;\/script&gt;\r\n&lt;\/head&gt;\r\n&lt;body&gt;\r\n     &lt;input type=&quot;text&quot; id=&quot;txtName&quot;&gt; &lt;button id=&quot;btnLogin&quot;&gt;Giri\u015f Yap&lt;\/button&gt;&lt;br&gt;\r\n     &lt;ul id=&quot;message&quot;&gt; &lt;\/ul&gt;\r\n&lt;\/body&gt;\r\n&lt;\/html&gt;\r\n<\/pre>\n<p>Burada ise client sockete ba\u011flanmakta ve jQuery e\u015fli\u011finde button nesnesine t\u0131kland\u0131\u011f\u0131 vakit &#8220;login&#8221; isimli olay yarat\u0131lmaktad\u0131r. Akabinde clienttaki &#8220;login&#8221; olay\u0131 tetiklendi\u011fi vakit sockette yarat\u0131lan &#8220;message&#8221; olay\u0131 burada dinlenilmektedir.<\/p>\n<p>Genel ama\u00e7 ise text nesnesine girilen de\u011feri al\u0131p sunucuya parametre olarak iletmek ve bundan t\u00fcm clientlar\u0131n haberdar edilmesini sa\u011flamakt\u0131r.<\/p>\n<p>Mevcut \u00e7al\u0131\u015fma neticesini a\u015fa\u011f\u0131daki g\u00f6rselden incelersek e\u011fer;<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/01\/Node.js-\u2013-Broadcast-Komutuyla-\u00c7oklu-Eri\u015fim-\u0130\u015flemleri.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/01\/Node.js-\u2013-Broadcast-Komutuyla-\u00c7oklu-Eri\u015fim-\u0130\u015flemleri.gif\" alt=\"Node.js \u2013 Broadcast Komutuyla \u00c7oklu Eri\u015fim \u0130\u015flemleri\" width=\"600\" height=\"355\" class=\"aligncenter size-full wp-image-10113\" \/><\/a><br \/>\ng\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere servera hangi client mesaj g\u00f6nderirse g\u00f6ndersin di\u011fer clientlara yans\u0131mamakta, dolay\u0131s\u0131yla \u00e7oklu eri\u015fim sa\u011flanamamaktad\u0131r.<\/p>\n<p>\u0130\u015fte b\u00f6yle bir durumda broadcast komutu arac\u0131l\u0131\u011f\u0131yla servera ba\u011fl\u0131 olan t\u00fcm clientlar aras\u0131nda bir haberle\u015fme yolu sa\u011flanacak ve bir client taraf\u0131ndan g\u00f6nderilen mesaj di\u011ferlerine iletilmi\u015f olacakt\u0131r.<\/p>\n<p><strong>Peki hoca! Broadcast komutunu nereye uygulayaca\u011f\u0131z?<\/strong> \u015feklinde sorunuzu duyar gibiyim&#8230;<br \/>\nBu sorunun cevab\u0131 yapmak istediklerimize yani amaca g\u00f6re olduk\u00e7a opsiyonellik g\u00f6stermektedir. Lakin ilgili i\u00e7eri\u011fin \u00f6rneklendirme senaryosunda, mesaj g\u00f6nderen client\u0131n g\u00f6nderdi\u011fi parametre de\u011ferini di\u011fer clientlarda yazd\u0131rmay\u0131 ama\u00e7 edindi\u011fimizden dolay\u0131 bu i\u015fi yapan olay broadcast komutunu kullanmak i\u00e7in do\u011fru se\u00e7im olacakt\u0131r.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n.\r\n.\r\n.\r\nio.on(&quot;connection&quot;, client =&gt; {\r\n     .\r\n     .\r\n     .\r\n     client.on(&quot;login&quot;, data =&gt; client.broadcast.emit(&quot;message&quot;, data));\r\n});\r\n<\/pre>\n<p>Evet, g\u00f6rd\u00fc\u011f\u00fcn\u00fcz \u00fczere &#8220;login&#8221; neticesinde client taraf\u0131ndan gelen datay\u0131 t\u00fcm clientlara g\u00f6nderebilmek i\u00e7in bir ba\u015fka deyi\u015fle \u00e7oklu eri\u015fim sa\u011flayabilmek i\u00e7in &#8220;client.broadcast.emit(&#8220;message&#8221;, data))&#8221; komutu uygulanm\u0131\u015ft\u0131r. Yani clienta \u00f6zel event emit edilmeden \u00f6nce &#8220;broadcast&#8221; komutu \u00e7a\u011fr\u0131larak o anda veri g\u00f6nderen client haricindeki t\u00fcm clientlara bu i\u015flemin(emit) yap\u0131laca\u011f\u0131 bildirilmektedir. Dolay\u0131s\u0131yla &#8220;message&#8221; event\u0131n\u0131 dinleyen t\u00fcm clientlarda a\u015fa\u011f\u0131daki ekran g\u00f6r\u00fcnt\u00fcs\u00fcnde oldu\u011fu gibi gerekli bilgilendirme sa\u011flanm\u0131\u015f olunuyor.<\/p>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/01\/Node.js-\u2013-Broadcast-Komutuyla-\u00c7oklu-Eri\u015fim-\u0130\u015flemleri-1.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/01\/Node.js-\u2013-Broadcast-Komutuyla-\u00c7oklu-Eri\u015fim-\u0130\u015flemleri-1.gif\" alt=\"Node.js \u2013 Broadcast Komutuyla \u00c7oklu Eri\u015fim \u0130\u015flemleri\" width=\"600\" height=\"355\" class=\"aligncenter size-full wp-image-10121\" \/><\/a><\/p>\n<p>Dikkat ederseniz e\u011fer &#8220;broadcast&#8221; komutu mesaj g\u00f6nderen client haricindeki t\u00fcm clientlara bildiride bulunmaktad\u0131r. E\u011fer o anki clienta dair bir aktivite ger\u00e7ekle\u015ftirmek isteniyorsa bunu zaten &#8220;broadcast&#8221; kullanmaks\u0131z\u0131n ger\u00e7ekle\u015ftirebiliyoruz.<\/p>\n<p>\u0130lgilenenlerin faydalanmas\u0131 dile\u011fiyle&#8230;<\/p>\n<p>Sonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#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, Bir \u00f6nceki Node.js \u2013 Websocket Nedir? Nas\u0131l Kullan\u0131l\u0131r? ba\u015fl\u0131kl\u0131 makalemde, Node.js teknolojisi \u00e7er\u00e7evesinde Websocket&#8217;in ne oldu\u011funa ve nas\u0131l kullan\u0131ld\u0131\u011f\u0131na detayl\u0131ca de\u011finmi\u015f olduk. Bu i\u00e7eri\u011fimizde ise websocket ile olu\u015fturulan TCP ba\u011flant\u0131s\u0131na ba\u011fl\u0131 t\u00fcm clientlara&#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":8600,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2145],"tags":[2722,2723,2715,2724],"class_list":["post-10104","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-node-js","tag-broadcast","tag-node-js-broadcast","tag-node-js-websocket","tag-websocket-broadcast"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/10104","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=10104"}],"version-history":[{"count":17,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/10104\/revisions"}],"predecessor-version":[{"id":10123,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/10104\/revisions\/10123"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/8600"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=10104"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=10104"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=10104"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}