﻿
{"id":10632,"date":"2019-03-27T16:10:55","date_gmt":"2019-03-27T16:10:55","guid":{"rendered":"https:\/\/www.gencayyildiz.com\/blog\/?p=10632"},"modified":"2019-03-27T16:10:55","modified_gmt":"2019-03-27T16:10:55","slug":"node-js-socket-io-client-tabanli-ozellestirmeler","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/node-js-socket-io-client-tabanli-ozellestirmeler\/","title":{"rendered":"Node.js &#8211; Socket.IO Client Tabanl\u0131 \u00d6zelle\u015ftirmeler"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Web socket \u00e7al\u0131\u015fmalar\u0131nda yap\u0131sal olarak t\u00fcm s\u00fcre\u00e7teki sorumluluk Node.js taraf\u0131ndan olu\u015fturulan server&#8217;da \u00fcstlenilmi\u015ftir. \u0130\u015fte bu s\u00fcre\u00e7te server&#8217;da ba\u011flant\u0131yla ilgili t\u00fcm olas\u0131 durumlar(connect\/disconnect vs.) ceyran etti\u011finde al\u0131nacak refleksleri serverdan ba\u011f\u0131ms\u0131z bir \u015fekilde client tabanl\u0131 belirleyebilmekteyiz. Bu i\u00e7eri\u011fimizde web socket \u00e7al\u0131\u015fmalar\u0131nda client tabanl\u0131 \u00f6zelle\u015ftirmeleri inceliyor olaca\u011f\u0131z&#8230;<\/p>\n<h3>Backend<\/h3>\n<p>\u0130lk olarak \u00e7al\u0131\u015fmam\u0131z\u0131 \u00f6rneklendirece\u011fimiz backendi a\u015fa\u011f\u0131daki gibi geli\u015ftirelim;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nconst socket = require(&quot;socket.io&quot;);\r\nconst http = require(&quot;http&quot;);\r\n\r\nconst server = http.createServer((request, response) =&gt; response.end(&quot;...&quot;));\r\nconst io = socket.listen(server.listen(5000, () =&gt; console.log(&quot;Starting...&quot;)));\r\n\r\nio.on(&quot;connection&quot;, socket =&gt; {\r\n    console.log(`${socket.id} connected...`);\r\n    socket.on(&quot;disconnect&quot;, () =&gt; console.log(`${socket.id} disconnected...`));\r\n});\r\n<\/pre>\n<h3>Client<\/h3>\n<p>Ard\u0131ndan client olarak kullanaca\u011f\u0131m\u0131z sayfam\u0131z\u0131n temellerini a\u015fa\u011f\u0131daki gibi atal\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        $(() =&gt; {\r\n            const socket = io.connect(&quot;http:\/\/localhost:5000\/&quot;);\r\n        });\r\n    &lt;\/script&gt;\r\n&lt;\/head&gt;\r\n&lt;body&gt;\r\n    &lt;ul id=&quot;message&quot;&gt;\r\n    &lt;\/ul&gt;\r\n&lt;\/body&gt;\r\n&lt;\/html&gt;\r\n<\/pre>\n<p>\u015eimdi ilk olarak ba\u011flant\u0131 prosed\u00fcrlerini ele alarak as\u0131l konumuza ba\u015flayal\u0131m;<\/p>\n<h4>Client Tabanl\u0131 Ba\u011flant\u0131 Prosed\u00fcrleri<\/h4>\n<ul>\n<li><strong style=\"color: orange\">reconnectionAttempts<\/strong><br \/>\nWeb sokete yap\u0131lan ba\u011flant\u0131 talebinin ba\u015far\u0131s\u0131z oldu\u011fu durumlarda ka\u00e7 kez yeniden ba\u011flant\u0131 denemesi yap\u0131laca\u011f\u0131n\u0131 belirtmektedir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        $(() =&gt; {\r\n            const socket = io.connect(&quot;http:\/\/localhost:5000\/&quot;, {\r\n                reconnectionAttempts: 2\r\n            });\r\n        });\r\n<\/pre>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/03\/Node.js-\u2013-Socket.IO-Client-Tabanl\u0131-\u00d6zelle\u015ftirmeler.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/03\/Node.js-\u2013-Socket.IO-Client-Tabanl\u0131-\u00d6zelle\u015ftirmeler.gif\" alt=\"Node.js \u2013 Socket.IO Client Tabanl\u0131 \u00d6zelle\u015ftirmeler\" width=\"708\" height=\"278\" class=\"aligncenter size-full wp-image-10640\" \/><\/a><br \/>\nEkran g\u00f6r\u00fcnt\u00fcs\u00fcnden de anla\u015f\u0131laca\u011f\u0131 \u00fczere belirtilen de\u011fer kadar tekrar connection denenecek, aksi halde tekrar sona erecektir.<br \/>\nVarsay\u0131lan olarak bir s\u0131n\u0131r tan\u0131mlanmad\u0131\u011f\u0131ndan ekstra bildirim yap\u0131lmad\u0131\u011f\u0131 s\u00fcrece sonsuza kadar connection denemesi yap\u0131lacakt\u0131r.\n<\/li>\n<li><strong style=\"color: orange\">reconnectionDelay<\/strong><br \/>\nBa\u011flant\u0131 talebinin ba\u015far\u0131s\u0131z oldu\u011fu durumlarda saniye cinsinden ne kadar s\u00fcrede bir connection tekrar\u0131 yap\u0131laca\u011f\u0131n\u0131 belirlemektedir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        $(() =&gt; {\r\n            const socket = io.connect(&quot;http:\/\/localhost:5000\/&quot;, {\r\n                reconnectionDelay: 1,\r\n            });\r\n        });\r\n<\/pre>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/03\/Node.js-\u2013-Socket.IO-Client-Tabanl\u0131-\u00d6zelle\u015ftirmeler-1.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/03\/Node.js-\u2013-Socket.IO-Client-Tabanl\u0131-\u00d6zelle\u015ftirmeler-1.gif\" alt=\"Node.js \u2013 Socket.IO Client Tabanl\u0131 \u00d6zelle\u015ftirmeler\" width=\"600\" height=\"236\" class=\"aligncenter size-full wp-image-10644\" \/><\/a>\n<\/li>\n<li><strong style=\"color: orange\">reconnection<\/strong><br \/>\nSocket&#8217;e yap\u0131lan ilk ba\u011flant\u0131 talebinde bir ba\u015far\u0131s\u0131zl\u0131k s\u00f6z konusuysa tekrar connectionlar\u0131n yap\u0131l\u0131p yap\u0131lmayaca\u011f\u0131n\u0131 belirleyen \u00f6zelliktir. &#8220;true&#8221; ya da &#8220;false&#8221; de\u011feri al\u0131r.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        $(() =&gt; {\r\n            const socket = io.connect(&quot;http:\/\/localhost:5000\/&quot;, {\r\n                reconnection: false\r\n            });\r\n        });\r\n<\/pre>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/03\/Node.js-\u2013-Socket.IO-Client-Tabanl\u0131-\u00d6zelle\u015ftirmeler-2.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/03\/Node.js-\u2013-Socket.IO-Client-Tabanl\u0131-\u00d6zelle\u015ftirmeler-2.gif\" alt=\"Node.js \u2013 Socket.IO Client Tabanl\u0131 \u00d6zelle\u015ftirmeler\" width=\"600\" height=\"106\" class=\"aligncenter size-full wp-image-10648\" \/><\/a>\n<\/li>\n<\/ul>\n<h4>Durumsal Fonksiyonlar<\/h4>\n<p>Web socket yap\u0131lanmas\u0131nda; ba\u015far\u0131s\u0131z ba\u011flant\u0131 durumlar\u0131nda yahut tekrar ba\u011flant\u0131 kurma \u00e7al\u0131\u015fmalar\u0131nda s\u00fcre\u00e7te hangi aksiyonun ceyran etti\u011fini takip edebilmek i\u00e7in sistem taraf\u0131ndan &#8220;emit&#8221; olarak tan\u0131mlanm\u0131\u015f \u00f6zel fonksiyonlar tetiklenmektedir. \u015eimdi gelin bu fonksiyonlar\u0131 inceleyelim;<\/p>\n<ul>\n<li><strong style=\"color: green\">reconnect_error<\/strong><br \/>\nBa\u011flant\u0131 ba\u015far\u0131s\u0131zsa tetiklenecek fonksiyondur.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        $(() =&gt; {\r\n            const socket = io.connect(&quot;http:\/\/localhost:5000\/&quot;, {\r\n                reconnectionAttempts: 10,\r\n                reconnectionDelay: 1,\r\n                reconnection: true\r\n            });\r\n            socket.on(&quot;reconnect_error&quot;, () =&gt; {\r\n                alert(&quot;Hata al\u0131nd\u0131...&quot;);\r\n            });\r\n        });\r\n<\/pre>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/03\/Node.js-\u2013-Socket.IO-Client-Tabanl\u0131-\u00d6zelle\u015ftirmeler-3.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/03\/Node.js-\u2013-Socket.IO-Client-Tabanl\u0131-\u00d6zelle\u015ftirmeler-3.gif\" alt=\"Node.js \u2013 Socket.IO Client Tabanl\u0131 \u00d6zelle\u015ftirmeler\" width=\"580\" height=\"488\" class=\"aligncenter size-full wp-image-10653\" \/><\/a>\n<\/li>\n<li><strong style=\"color: green\">reconnect_attempt<\/strong><br \/>\nBa\u015far\u0131s\u0131z ba\u011flant\u0131 sonras\u0131 tekrar talepte bulunulan ba\u011flant\u0131 esnas\u0131nda tetiklenen fonksiyondur.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        $(() =&gt; {\r\n            const socket = io.connect(&quot;http:\/\/localhost:5000\/&quot;, {\r\n                reconnectionAttempts: 10,\r\n                reconnectionDelay: 1,\r\n                reconnection: true\r\n            });\r\n            socket.on(&quot;reconnect_attempt&quot;, () =&gt; {\r\n                alert(&quot;Tekrar ba\u011flan\u0131l\u0131yor...&quot;);\r\n            });\r\n        });\r\n<\/pre>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/03\/Node.js-\u2013-Socket.IO-Client-Tabanl\u0131-\u00d6zelle\u015ftirmeler-4.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/03\/Node.js-\u2013-Socket.IO-Client-Tabanl\u0131-\u00d6zelle\u015ftirmeler-4.gif\" alt=\"Node.js \u2013 Socket.IO Client Tabanl\u0131 \u00d6zelle\u015ftirmeler\" width=\"580\" height=\"490\" class=\"aligncenter size-full wp-image-10655\" \/><\/a>\n<\/li>\n<li><strong style=\"color: green\">reconnect<\/strong><br \/>\nBa\u015far\u0131s\u0131z ba\u011flant\u0131 sonras\u0131 tekrar talepte bulunulan ba\u011flant\u0131n\u0131n ba\u015far\u0131l\u0131 oldu\u011fu durumda tetiklenir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        $(() =&gt; {\r\n            const socket = io.connect(&quot;http:\/\/localhost:5000\/&quot;, {\r\n                reconnectionAttempts: 10,\r\n                reconnectionDelay: 1,\r\n                reconnection: true\r\n            });\r\n            socket.on(&quot;reconnect&quot;, () =&gt; {\r\n                alert(&quot;Ba\u011flant\u0131 ba\u015far\u0131l\u0131...&quot;);\r\n            });\r\n        });\r\n<\/pre>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/03\/Node.js-\u2013-Socket.IO-Client-Tabanl\u0131-\u00d6zelle\u015ftirmeler-5.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/03\/Node.js-\u2013-Socket.IO-Client-Tabanl\u0131-\u00d6zelle\u015ftirmeler-5.gif\" alt=\"Node.js \u2013 Socket.IO Client Tabanl\u0131 \u00d6zelle\u015ftirmeler\" width=\"600\" height=\"294\" class=\"aligncenter size-full wp-image-10659\" \/><\/a>\n<\/li>\n<\/ul>\n<p>Server\u0131n opsiyonel durumlar\u0131na nazaran client tabanl\u0131 al\u0131nabilecek reflekslerimizi incelemi\u015f olduk. \u015eimdi a\u015fa\u011f\u0131daki \u00f6rnek \u00e7al\u0131\u015fmay\u0131 inceleyerek, konumuzu noktalayal\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        $(() =&gt; {\r\n            const socket = io.connect(&quot;http:\/\/localhost:5000\/&quot;, {\r\n                reconnectionDelay: 1,\r\n                reconnection: true\r\n            });\r\n\r\n            socket.on(&quot;reconnect_error&quot;, () =&gt; {\r\n                $(&quot;#message&quot;).prepend(`&lt;li style=&quot;color:red;&quot;&gt;&lt;strong&gt;Hata al\u0131nd\u0131...&lt;\/strong&gt;&lt;\/li&gt;`);\r\n            });\r\n            socket.on(&quot;reconnect_attempt&quot;, () =&gt; {\r\n                $(&quot;#message&quot;).prepend(`&lt;li style=&quot;color:blue;&quot;&gt;&lt;strong&gt;Yeniden ba\u011flan\u0131l\u0131yor...&lt;\/strong&gt;&lt;\/li&gt;`);\r\n            });\r\n            socket.on(&quot;reconnect&quot;, () =&gt; {\r\n                $(&quot;#message&quot;).prepend(`&lt;li style=&quot;color:green;&quot;&gt;&lt;strong&gt;Ba\u011flant\u0131 ba\u015far\u0131l\u0131...&lt;\/strong&gt;&lt;\/li&gt;`);\r\n            });\r\n        });\r\n    &lt;\/script&gt;\r\n&lt;\/head&gt;\r\n&lt;body&gt;\r\n    &lt;ul id=&quot;message&quot;&gt;\r\n    &lt;\/ul&gt;\r\n&lt;\/body&gt;\r\n&lt;\/html&gt;\r\n<\/pre>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/03\/Node.js-\u2013-Socket.IO-Client-Tabanl\u0131-\u00d6zelle\u015ftirmeler6.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2019\/03\/Node.js-\u2013-Socket.IO-Client-Tabanl\u0131-\u00d6zelle\u015ftirmeler6.gif\" alt=\"Node.js \u2013 Socket.IO Client Tabanl\u0131 \u00d6zelle\u015ftirmeler\" width=\"600\" height=\"316\" class=\"aligncenter size-full wp-image-10670\" \/><\/a><\/p>\n<p>\u0130lgilenenlerin faydalanmas\u0131 dile\u011fiyle&#8230;<br \/>\nSonraki 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, Web socket \u00e7al\u0131\u015fmalar\u0131nda yap\u0131sal olarak t\u00fcm s\u00fcre\u00e7teki sorumluluk Node.js taraf\u0131ndan olu\u015fturulan server&#8217;da \u00fcstlenilmi\u015ftir. \u0130\u015fte bu s\u00fcre\u00e7te server&#8217;da ba\u011flant\u0131yla ilgili t\u00fcm olas\u0131 durumlar(connect\/disconnect vs.) ceyran etti\u011finde al\u0131nacak refleksleri serverdan ba\u011f\u0131ms\u0131z bir \u015fekilde client tabanl\u0131&#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":[2147,2797,2802,2801,2800,2799,2795,2798,2796],"class_list":["post-10632","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-node-js","tag-node-js","tag-node-js-socket-io","tag-reconnect","tag-reconnect_attempt","tag-reconnect_error","tag-reconnection","tag-reconnectionattempts","tag-reconnectiondelay","tag-socket-io"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/10632","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=10632"}],"version-history":[{"count":28,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/10632\/revisions"}],"predecessor-version":[{"id":10671,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/10632\/revisions\/10671"}],"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=10632"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=10632"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=10632"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}