﻿
{"id":10124,"date":"2019-01-03T20:32:00","date_gmt":"2019-01-03T20:32:00","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=10124"},"modified":"2019-01-03T20:32:00","modified_gmt":"2019-01-03T20:32:00","slug":"node-js-websockette-namespace-ve-room-kavramlari-ve-kullanimlari","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/node-js-websockette-namespace-ve-room-kavramlari-ve-kullanimlari\/","title":{"rendered":"Node.js &#8211; Websocket&#8217;te Namespace ve Room Kavramlar\u0131 ve Kullan\u0131mlar\u0131"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Bu i\u00e7eri\u011fimizde Node.js mimarisinde websocket teknolojisi terminolojisinden olan <strong>Namespace<\/strong> ve <strong>Room<\/strong> kavramlar\u0131na de\u011finece\u011fiz. Asl\u0131nda bu kavramlar, i\u015flevsel olarak kelime bazl\u0131 her ne kadar anla\u015f\u0131labilir olsalarda, genel programlama bilgisi olan herkes taraf\u0131ndan da terminolojik manalar\u0131na \u00e7okta yabanc\u0131 olmad\u0131\u011f\u0131m\u0131z terimlerdir. \u015e\u00f6yle ki, bir namespace kavram\u0131 yaz\u0131l\u0131m d\u00fcnyas\u0131nda yap\u0131lar\u0131 k\u00fcmelememizi sa\u011flayan yap\u0131lard\u0131r. Hatta daha da terminolojik olursak yaz\u0131l\u0131m\u0131 genel hatlar\u0131yla belirleyen k\u00fct\u00fcphaneler olu\u015fturmam\u0131z\u0131 ve bu k\u00fct\u00fcphanelerin namespace de\u011ferleri \u00fczerinden birbirleriyle haberle\u015fmesini sa\u011flayan yap\u0131lard\u0131r diyebiliriz&#8230;<\/p>\n<p>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz \u00fczere bu i\u00e7eri\u011fimizde teorik olarak \u00e7okta yabanc\u0131l\u0131k \u00e7ekmeyece\u011fimiz kavramlar\u0131 inceleyece\u011fiz. \u015eimdi gelin Node.js &#8211; Websocket teknolojisiyle bu kavramlar\u0131 \u00f6nbilgilerimiz e\u015fli\u011finde bir kez daha de\u011ferlendirelim ve bir an \u00f6nce i\u00e7eri\u011fimizin esas amac\u0131 olarak konuyu pratik boyutta de\u011ferlendirmeye ba\u015flayal\u0131m.<\/p>\n<h3>Websocket&#8217;te Namespace Nedir?<\/h3>\n<p>Node.js Websocket teknolojisinde socket \u00e7al\u0131\u015fmalar\u0131m\u0131z\u0131 b\u00f6lmek i\u00e7in <strong>Namespace<\/strong> diye nitelendirilen par\u00e7alar kullan\u0131lmaktad\u0131r. Namespaceler sayesinde socket i\u015flemlerimizi par\u00e7alar e\u015fli\u011finde y\u00f6netebilir ve bir i\u015flemi bir di\u011ferinden kolayl\u0131kla ay\u0131rabiliriz.<\/p>\n<p>E\u011fer ki, taraf\u0131m\u0131zdan bir namespace tan\u0131mlanmazsa yahut kullanmazsak, varsay\u0131lan olarak Default\/Root\/Global\/K\u00f6k diye nitelendirilen namespace devreye girecek ve ge\u00e7erli olacakt\u0131r.<\/p>\n<h3>Websocket&#8217;te Room Nedir?<\/h3>\n<p><strong>Roomlar<\/strong>, namespaceler i\u00e7erisinde bulunan yap\u0131lard\u0131r. Yani bir namespace, bir veya birden fazla room bar\u0131nd\u0131rabilir. Teknik olarak g\u00f6revleri namespace i\u00e7erisinde farkl\u0131 par\u00e7alar olu\u015fturmakt\u0131r. Bu par\u00e7alar birbirlerinden ba\u011f\u0131ms\u0131z bir \u015fekilde kullan\u0131labildi\u011fi gibi ihtiyaca d\u00f6n\u00fck namespace genelinde ortak yorumlanabilirler.<\/p>\n<p>Dikkat ederseniz her iki yap\u0131da sunucu\/server taraf\u0131nda olu\u015fturulmaktad\u0131r.<\/p>\n<h3>Websocket&#8217;te Namespace Olu\u015fturmak<\/h3>\n<p>E\u011fer ki bir namespace tan\u0131mlamak isteniyorsa mevcut soket ba\u011flant\u0131s\u0131 \u00fczerinden &#8220;of&#8221; fonksiyonu ile ilgili namespace tan\u0131mlanabilir.<\/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\nserver.listen(1234);\r\nconst io = socket.listen(server);\r\n\r\nconst xnamespace = io.of(&quot;\/xnamespace&quot;);\r\nconst ynamespace = io.of(&quot;\/ynamespace&quot;);\r\n<\/pre>\n<p>Yukar\u0131daki kod blo\u011funda g\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere &#8220;xnamespace&#8221; ve &#8220;ynamespace&#8221; olmak \u00fczere iki adet namespace tan\u0131mlanm\u0131\u015ft\u0131r.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nxnamespace.on(&quot;connection&quot;, socket =&gt; {\r\n     console.log(&quot;connect xnamespace&quot;);\r\n});\r\n\r\nynamespace.on(&quot;connection&quot;, socket =&gt; {\r\n     console.log(&quot;connect ynamespace&quot;);\r\n});\r\n<\/pre>\n<p>G\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere tan\u0131mlanan her iki namespace &#8220;connection&#8221; event\u0131n\u0131 dinlemekte ve bir client taraf\u0131ndan ba\u011flant\u0131 ger\u00e7ekle\u015ftirilece\u011fi zaman console&#8217;a veri girmektedir.<\/p>\n<p>Olu\u015fturulan namespacelere, client taraf\u0131ndan ba\u011flanmak isteniyorsa a\u015fa\u011f\u0131daki gibi belirtilmesi yeterlidir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n--- index.html ---\r\n&lt;!DOCTYPE html&gt;\r\n&lt;html lang=&quot;en&quot;&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          const socket = io.connect(&quot;http:\/\/localhost:1234\/xnamespace&quot;);\r\n     &lt;\/script&gt;\r\n&lt;\/head&gt;\r\n&lt;body&gt;\r\n&lt;\/body&gt;\r\n&lt;\/html&gt;\r\n<\/pre>\n<p>Yukar\u0131daki kod blo\u011funda bulunan ba\u011flant\u0131 c\u00fcmlesini detayl\u0131 incelemek i\u00e7in a\u015fa\u011f\u0131ya al\u0131rsak e\u011fer;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n.\r\n.\r\n.\r\nconst socket = io.connect(&quot;http:\/\/localhost:1234\/xnamespace&quot;);\r\n.\r\n.\r\n.\r\n<\/pre>\n<p>Evet&#8230; G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi bir namespace&#8217;e ba\u011flanmak i\u00e7in tek yap\u0131lmas\u0131 gereken socket adresinin yan\u0131na &#8220;\/[Namespace Ad\u0131]&#8221; belirtilmesidir. E\u011fer ki bu belirtilmiyorsa sistem varsay\u0131lan\/default namespace \u00fczerinden \u00e7al\u0131\u015f\u0131yor demektir. Biz \u00f6rne\u011fimizde &#8220;xnamespace&#8221;i vermi\u015f bulunmaktay\u0131z. Dolay\u0131s\u0131yla bu sayfay\u0131 kullanacak olan clientlar &#8220;xnamespace&#8221; isimli namespace&#8217;e ba\u011flanacak demektir.<\/p>\n<p>Namespaceler, websocket \u00e7al\u0131\u015fmalar\u0131ndaki farkl\u0131 yap\u0131sal \u00e7al\u0131\u015fmalar\u0131 birbirlerinden izole etmekte olduklar\u0131ndan dolay\u0131 birine ba\u011flanan client bir di\u011ferinden ba\u011f\u0131ms\u0131z seyr etmi\u015f olacakt\u0131r. \u015e\u00f6yle ki;<br \/>\nBir \u00f6nceki &#8220;index.html&#8221; sayfas\u0131 &#8220;xnamespace&#8221; isimli namespace&#8217;e ba\u011flanmaktayd\u0131. Birde a\u015fa\u011f\u0131da &#8220;ynamespace&#8221;e ba\u011flanacak olan sayfay\u0131 olu\u015ftural\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n&lt;!DOCTYPE html&gt;\r\n&lt;html lang=&quot;en&quot;&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          const socket = io.connect(&quot;http:\/\/localhost:1234\/ynamespace&quot;);\r\n     &lt;\/script&gt;\r\n&lt;\/head&gt;\r\n&lt;body&gt;\r\n&lt;\/body&gt;\r\n&lt;\/html&gt;\r\n<\/pre>\n<p>\u015eimdi bu sayfalara ba\u011flanan clientlar\u0131n durumunu a\u015fa\u011f\u0131daki ekran g\u00f6r\u00fcnt\u00fcs\u00fcnden inceleyelim.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/01\/Node.js-\u2013-Websocket\u2019te-Namespace-ve-Room-Kavramlar\u0131-ve-Kullan\u0131mlar\u0131.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/01\/Node.js-\u2013-Websocket\u2019te-Namespace-ve-Room-Kavramlar\u0131-ve-Kullan\u0131mlar\u0131.gif\" alt=\"Node.js \u2013 Websocket\u2019te Namespace ve Room Kavramlar\u0131 ve Kullan\u0131mlar\u0131\" width=\"800\" height=\"474\" class=\"aligncenter size-full wp-image-10138\" \/><\/a><br \/>\nG\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere namespaceler birbirlerinden izole bir \u015fekilde \u00e7al\u0131\u015fmaktad\u0131r.<\/p>\n<h4>Namespace \u00dczerinden Emit Olu\u015fturmak<\/h4>\n<p>Namespace \u00fczerinden emit olu\u015ftururken dikkat edilmesi gereken iki husus vard\u0131r. Bu iki hususu a\u015fa\u011f\u0131daki namespaceli bir sockete ba\u011flanm\u0131\u015f html dosyas\u0131 \u00fczerinden de\u011ferlendirelim;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n&lt;!DOCTYPE html&gt;\r\n&lt;html lang=&quot;en&quot;&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          const socket = io.connect(&quot;http:\/\/localhost:1234\/xnamespace&quot;);\r\n          $(() =&gt; {\r\n               $(&quot;#btnLogin&quot;).click(() =&gt; {\r\n                    socket.emit(&quot;login&quot;, $(&quot;#txtName&quot;).val());\r\n               });\r\n               socket.on(&quot;message&quot;, data =&gt; $(&quot;#message&quot;).append(`&lt;li&gt;${data}&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;\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<ul>\n<li>E\u011fer, &#8220;socket&#8221; isimli parametre \u00fczerinden emit i\u015flemi yaparsak sadece o anda mesaj g\u00f6nderen client taraf\u0131nda ilgili i\u015flem yap\u0131lacakt\u0131r.\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nxnamespace.on(&quot;connection&quot;, socket =&gt; {\r\n     console.log(&quot;connect xnamespace&quot;);\r\n     socket.on(&quot;disconnect&quot;, () =&gt; console.log(&quot;disconnect xnamespace&quot;));\r\n     socket.on(&quot;login&quot;, data =&gt; {\r\n          socket.emit(&quot;message&quot;, data);\r\n     });\r\n});\r\n<\/pre>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/01\/Node.js-\u2013-Websocket\u2019te-Namespace-ve-Room-Kavramlar\u0131-ve-Kullan\u0131mlar\u0131-1.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/01\/Node.js-\u2013-Websocket\u2019te-Namespace-ve-Room-Kavramlar\u0131-ve-Kullan\u0131mlar\u0131-1.gif\" alt=\"Node.js \u2013 Websocket\u2019te Namespace ve Room Kavramlar\u0131 ve Kullan\u0131mlar\u0131\" width=\"390\" height=\"300\" class=\"aligncenter size-full wp-image-10142\" \/><\/a>\n<\/li>\n<li>\nYok e\u011fer namespace&#8217;e ba\u011fl\u0131 t\u00fcm clientlara i\u015flem yap\u0131lacaksa <a href=\"http:\/\/www.gencayyildiz.com\/blog\/node-js-broadcast-komutuyla-coklu-erisim-islemleri\/\" rel=\"noopener\" target=\"_blank\">broadcast<\/a> komutunu kullanarak bu i\u015flemi ger\u00e7ekle\u015ftirebilece\u011fimiz gibi direkt olarak namespace&#8217;i tarif eden &#8220;xnamespace&#8221; sabiti \u00fczerinden de emit i\u015flemini uygulayabiliriz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nxnamespace.on(&quot;connection&quot;, socket =&gt; {\r\n     console.log(&quot;connect xnamespace&quot;);\r\n     socket.on(&quot;disconnect&quot;, () =&gt; console.log(&quot;disconnect xnamespace&quot;));\r\n     socket.on(&quot;login&quot;, data =&gt; {\r\n          xnamespace.emit(&quot;message&quot;, data);\r\n     });\r\n});\r\n<\/pre>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/01\/Node.js-\u2013-Websocket\u2019te-Namespace-ve-Room-Kavramlar\u0131-ve-Kullan\u0131mlar\u0131-2.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/01\/Node.js-\u2013-Websocket\u2019te-Namespace-ve-Room-Kavramlar\u0131-ve-Kullan\u0131mlar\u0131-2.gif\" alt=\"Node.js \u2013 Websocket\u2019te Namespace ve Room Kavramlar\u0131 ve Kullan\u0131mlar\u0131\" width=\"390\" height=\"300\" class=\"aligncenter size-full wp-image-10146\" \/><\/a>\n<\/li>\n<\/ul>\n<h3>Websocket&#8217;te Room Olu\u015fturmak<\/h3>\n<p>Herhangi bir room&#8217;a ba\u011flanabilmek i\u00e7in &#8220;join&#8221; fonksiyonu kullan\u0131l\u0131r. &#8220;join&#8221; fonksiyonu parametre olarak ald\u0131\u011f\u0131 de\u011ferdeki odaya varsa ba\u011flanmam\u0131z\u0131, yoksa olu\u015fturup ba\u011flanmam\u0131z\u0131 sa\u011flayan bir fonksiyondur.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nxnamespace.on(&quot;connection&quot;, socket =&gt; {\r\n     console.log(&quot;connect xnamespace&quot;);\r\n     socket.on(&quot;disconnect&quot;, () =&gt; console.log(&quot;disconnect xnamespace&quot;));\r\n     socket.on(&quot;login&quot;, data =&gt; {\r\n          socket.join(data, () =&gt; {\r\n               console.log(`Connected. Root Name : ${data}`);\r\n          });\r\n     });\r\n});\r\n<\/pre>\n<p>G\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere parametreden gelen de\u011fer ad\u0131nda room olu\u015fturulmaktad\u0131r.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n&lt;!DOCTYPE html&gt;\r\n&lt;html lang=&quot;en&quot;&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          const socket = io.connect(&quot;http:\/\/localhost:1234\/xnamespace&quot;);\r\n          $(() =&gt; {\r\n               $(&quot;#btnLogin&quot;).click(() =&gt; {\r\n                    socket.emit(&quot;login&quot;, $(&quot;#txtRoomName&quot;).val());\r\n               });\r\n               socket.on(&quot;message&quot;, data =&gt; $(&quot;#message&quot;).append(`&lt;li&gt;${data} odas\u0131na ba\u011flan\u0131ld\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;txtRoomName&quot;&gt; &lt;button id=&quot;btnLogin&quot;&gt;Odaya Giri\u015f Yap&lt;\/button&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<h4>Room \u00dczerinden Emit Olu\u015fturmak<\/h4>\n<p>Olu\u015fturulan odaya emit ile olay ba\u011flayabilmek i\u00e7in &#8220;to&#8221; ya da &#8220;in&#8221; fonksiyonlar\u0131 kullan\u0131lmaktad\u0131r. Room \u00fczerinden &#8220;Expect Sender&#8221; ve &#8220;Including Sender&#8221; olmak \u00fczere iki farkl\u0131 \u015fekilde emit olu\u015fturulabilir.<\/p>\n<ul>\n<li><strong>Expect Sender<\/strong><br \/>\nMesaj\u0131 g\u00f6nderen ki\u015fi hari\u00e7 o odada kim varsa herkese g\u00f6nderir. &#8220;socket&#8221; parametresi ile ger\u00e7ekle\u015ftirilir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nxnamespace.on(&quot;connection&quot;, socket =&gt; {\r\n     console.log(&quot;connect xnamespace&quot;);\r\n     socket.on(&quot;disconnect&quot;, () =&gt; console.log(&quot;disconnect xnamespace&quot;));\r\n     socket.on(&quot;login&quot;, data =&gt; {\r\n          socket.join(data, () =&gt; {\r\n               console.log(`Connected. Root Name : ${data}`);\r\n          });\r\n          socket.in(data).emit(&quot;message&quot;, data);\r\n          \/\/Ya da\r\n          socket.to(data).emit(&quot;message&quot;, data);\r\n     });\r\n});\r\n<\/pre>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/01\/Node.js-\u2013-Websocket\u2019te-Namespace-ve-Room-Kavramlar\u0131-ve-Kullan\u0131mlar\u0131-3.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/01\/Node.js-\u2013-Websocket\u2019te-Namespace-ve-Room-Kavramlar\u0131-ve-Kullan\u0131mlar\u0131-3.gif\" alt=\"Node.js \u2013 Websocket\u2019te Namespace ve Room Kavramlar\u0131 ve Kullan\u0131mlar\u0131\" width=\"800\" height=\"896\" class=\"aligncenter size-full wp-image-10150\" \/><\/a><br \/>\nYukar\u0131daki ekran g\u00f6r\u00fcnt\u00fcs\u00fcne dikkat ederseniz e\u011fer bir odaya ilk defa girilmeye \u00e7al\u0131\u015f\u0131ld\u0131\u011f\u0131nda mesaj yazd\u0131r\u0131lmamaktad\u0131r. \u00c7\u00fcnk\u00fc oda o esnada olu\u015fturulmakta ve dolay\u0131s\u0131yla olu\u015fturulan o odaya ilk ilgili client giri\u015f yapm\u0131\u015f bulunmaktad\u0131r. Dolay\u0131s\u0131yla kendisinden ba\u015fka client olmad\u0131\u011f\u0131ndan dolay\u0131 di\u011fer clientta mesaj yazd\u0131r\u0131lmamaktad\u0131r. \u0130lk ad\u0131mdan sonra yine ayn\u0131 odaya di\u011fer client taraf\u0131ndan giri\u015f yap\u0131l\u0131rsa bundan sonra oday\u0131 olu\u015fturan client ilk giri\u015f yapan oldu\u011fundan dolay\u0131 mesaj bu client taraf\u0131nda tetiklenmektedir.\n<\/li>\n<li><strong>Including Sender<\/strong><br \/>\nMesaj\u0131 g\u00f6nderende dahil o odadaki herkese g\u00f6nderilir. &#8220;io&#8221; ya da &#8220;namespace&#8221; sabiti \u00fczerinden ger\u00e7ekle\u015ftirilir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nxnamespace.on(&quot;connection&quot;, socket =&gt; {\r\n     console.log(&quot;connect xnamespace&quot;);\r\n     socket.on(&quot;disconnect&quot;, () =&gt; console.log(&quot;disconnect xnamespace&quot;));\r\n     socket.on(&quot;login&quot;, data =&gt; {\r\n          socket.join(data, () =&gt; {\r\n               console.log(`Connected. Root Name : ${data}`);\r\n          });\r\n          xnamespace.in(data).emit(&quot;message&quot;, data);\r\n          \/\/Ya da\r\n          xnamespace.to(data).emit(&quot;message&quot;, data);\r\n     });\r\n});\r\n<\/pre>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/01\/Node.js-\u2013-Websocket\u2019te-Namespace-ve-Room-Kavramlar\u0131-ve-Kullan\u0131mlar\u0131-4.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/01\/Node.js-\u2013-Websocket\u2019te-Namespace-ve-Room-Kavramlar\u0131-ve-Kullan\u0131mlar\u0131-4.gif\" alt=\"Node.js \u2013 Websocket\u2019te Namespace ve Room Kavramlar\u0131 ve Kullan\u0131mlar\u0131\" width=\"600\" height=\"672\" class=\"aligncenter size-full wp-image-10153\" \/><\/a><\/p>\n<p>G\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere odaya ba\u011fl\u0131 olan t\u00fcm clientlara(g\u00f6nderende dahil) ilgili mesaj g\u00f6sterilmektedir.\n<\/li>\n<\/ul>\n<p>Ve son olarak a\u015fa\u011f\u0131daki \u00f6zet bilgiyle i\u00e7eri\u011fimizi noktalayal\u0131m.<\/p>\n<blockquote><p>Room \u00f6rneklendirmelerinden anla\u015f\u0131laca\u011f\u0131 \u00fczere, bir client ayn\u0131 anda birden fazla room&#8217;da bulunabilir&#8230;<\/p><\/blockquote>\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, Bu i\u00e7eri\u011fimizde Node.js mimarisinde websocket teknolojisi terminolojisinden olan Namespace ve Room kavramlar\u0131na de\u011finece\u011fiz. Asl\u0131nda bu kavramlar, i\u015flevsel olarak kelime bazl\u0131 her ne kadar anla\u015f\u0131labilir olsalarda, genel programlama bilgisi olan herkes taraf\u0131ndan da terminolojik&#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":[2729,2730,2147,2715,2725,2726,2727,2728],"class_list":["post-10124","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-node-js","tag-expect-sender","tag-including-sender","tag-node-js","tag-node-js-websocket","tag-node-js-websocket-namespace","tag-node-js-websocket-room","tag-websocket-namespace","tag-websocket-room"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/10124","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=10124"}],"version-history":[{"count":27,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/10124\/revisions"}],"predecessor-version":[{"id":10156,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/10124\/revisions\/10156"}],"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=10124"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=10124"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=10124"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}