{"id":37252,"date":"2025-12-29T13:00:42","date_gmt":"2025-12-29T10:00:42","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/ayni-sunucuda-rest-ve-gercek-zamanli-iletisim-protokollerini-orn-websockets-birlikte-sunma-rehberi\/"},"modified":"2025-12-29T13:00:42","modified_gmt":"2025-12-29T10:00:42","slug":"ayni-sunucuda-rest-ve-gercek-zamanli-iletisim-protokollerini-orn-websockets-birlikte-sunma-rehberi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/ayni-sunucuda-rest-ve-gercek-zamanli-iletisim-protokollerini-orn-websockets-birlikte-sunma-rehberi\/","title":{"rendered":"Ayn\u0131 Sunucuda REST ve Ger\u00e7ek Zamanl\u0131 \u0130leti\u015fim Protokollerini (\u00d6rn: WebSockets) Birlikte Sunma Rehberi"},"content":{"rendered":"<h2>Ayn\u0131 Sunucuda REST ve Ger\u00e7ek Zamanl\u0131 \u0130leti\u015fim Protokollerini (\u00d6rn: WebSockets) Birlikte Sunma Rehberi<\/h2>\n<p>G\u00fcn\u00fcm\u00fcz modern web uygulamalar\u0131, farkl\u0131 ileti\u015fim ihtiya\u00e7lar\u0131na y\u00f6nelik \u00e7e\u015fitli protokoller kullanmaktad\u0131r. Geleneksel olarak kaynak tabanl\u0131 veri al\u0131\u015fveri\u015fi i\u00e7in RESTful API&#8217;ler tercih edilirken, ger\u00e7ek zamanl\u0131 etkile\u015fimler, bildirimler veya anl\u0131k veri ak\u0131\u015flar\u0131 i\u00e7in WebSockets gibi \u00e7ift y\u00f6nl\u00fc ileti\u015fim protokolleri \u00f6ne \u00e7\u0131kar. Bu rehberde, bir uygulaman\u0131n hem REST API&#8217;sini hem de ger\u00e7ek zamanl\u0131 ileti\u015fim protokollerini (bu makalede &#8220;MCP&#8221; terimi yerine yayg\u0131n bir \u00f6rnek olarak WebSockets&#8217;\u0131 ele alaca\u011f\u0131z) ayn\u0131 sunucu \u00fczerinde nas\u0131l verimli bir \u015fekilde bar\u0131nd\u0131r\u0131laca\u011f\u0131n\u0131, mimari yakla\u015f\u0131mlar\u0131, uygulama \u00f6rneklerini ve dikkat edilmesi gerekenleri detayl\u0131 bir \u015fekilde inceleyece\u011fiz.<\/p>\n<h3>REST ve WebSockets Aras\u0131ndaki Temel Farklar<\/h3>\n<p>REST (Representational State Transfer) ve WebSockets, web tabanl\u0131 uygulamalarda veri al\u0131\u015fveri\u015fi i\u00e7in kullan\u0131lan iki farkl\u0131 ancak tamamlay\u0131c\u0131 yakla\u015f\u0131md\u0131r. Her birinin kendine \u00f6zg\u00fc avantajlar\u0131 ve kullan\u0131m senaryolar\u0131 bulunur.<\/p>\n<h4>REST API&#8217;nin \u00d6zellikleri ve Kullan\u0131m Alanlar\u0131<\/h4>\n<p>REST API&#8217;ler, HTTP protokol\u00fc \u00fczerine in\u015fa edilmi\u015f, durum bilgisiz (stateless) ve kaynak tabanl\u0131 bir mimari stilidir. Her istek, sunucunun istemcinin \u00f6nceki istekleri hakk\u0131nda herhangi bir bilgiye sahip olmamas\u0131n\u0131 gerektirir. Bu durum, API&#8217;leri \u00f6l\u00e7eklenebilir ve hata toleransl\u0131 hale getirir. Genellikle CRUD (Create, Read, Update, Delete) operasyonlar\u0131 i\u00e7in kullan\u0131l\u0131rlar.<\/p>\n<ul>\n<li><strong>Durum Bilgisiz (Stateless):<\/strong> Her istek, sunucunun i\u015flemi tamamlamas\u0131 i\u00e7in gerekli t\u00fcm bilgiyi i\u00e7erir.<\/li>\n<li><strong>\u00d6nbelleklenebilir (Cacheable):<\/strong> Yan\u0131tlar istemci taraf\u0131nda veya ara sunucularda \u00f6nbelle\u011fe al\u0131nabilir.<\/li>\n<li><strong>Katmanl\u0131 Sistem (Layered System):<\/strong> Y\u00fck dengeleyiciler, proxy&#8217;ler gibi ara katmanlar kullan\u0131labilir.<\/li>\n<li><strong>Kullan\u0131m Alanlar\u0131:<\/strong> Blog yaz\u0131lar\u0131, e-ticaret \u00fcr\u00fcn listeleri, kullan\u0131c\u0131 profilleri gibi statik veya yar\u0131 statik verilerin al\u0131nmas\u0131, g\u00f6nderilmesi ve g\u00fcncellenmesi.<\/li>\n<\/ul>\n<h4>WebSockets&#8217;\u0131n \u00d6zellikleri ve Kullan\u0131m Alanlar\u0131<\/h4>\n<p>WebSockets, istemci ile sunucu aras\u0131nda tam \u00e7ift y\u00f6nl\u00fc, kal\u0131c\u0131 bir ba\u011flant\u0131 sa\u011flayan bir ileti\u015fim protokol\u00fcd\u00fcr. HTTP el s\u0131k\u0131\u015fmas\u0131 ile ba\u015flar, ancak daha sonra HTTP&#8217;den ba\u011f\u0131ms\u0131z, d\u00fc\u015f\u00fck gecikmeli bir ba\u011flant\u0131ya y\u00fckseltilir. Bu ba\u011flant\u0131 a\u00e7\u0131k kald\u0131\u011f\u0131 s\u00fcrece, hem istemci hem de sunucu birbirlerine veri g\u00f6nderebilir.<\/p>\n<ul>\n<li><strong>\u00c7ift Y\u00f6nl\u00fc (Full-Duplex):<\/strong> Hem istemci hem de sunucu ayn\u0131 anda veri g\u00f6nderebilir ve alabilir.<\/li>\n<li><strong>Kal\u0131c\u0131 Ba\u011flant\u0131:<\/strong> Bir kez kurulan ba\u011flant\u0131, kapat\u0131lana kadar a\u00e7\u0131k kal\u0131r, her mesaj i\u00e7in yeni bir ba\u011flant\u0131 kurma maliyeti yoktur.<\/li>\n<li><strong>D\u00fc\u015f\u00fck Gecikme:<\/strong> Ger\u00e7ek zamanl\u0131 uygulamalar i\u00e7in idealdir.<\/li>\n<li><strong>Kullan\u0131m Alanlar\u0131:<\/strong> Anl\u0131k mesajla\u015fma uygulamalar\u0131, canl\u0131 bildirimler, oyunlar, hisse senedi takip sistemleri, canl\u0131 konum takibi.<\/li>\n<\/ul>\n<h4>Neden Birlikte Kullan\u0131m \u0130htiyac\u0131 Do\u011far?<\/h4>\n<p>Modern uygulamalar genellikle hem veritaban\u0131ndan veri \u00e7ekme ve g\u00fcncelleme (REST) hem de anl\u0131k etkile\u015fimler (WebSockets) gerektirir. \u00d6rne\u011fin, bir sosyal medya uygulamas\u0131, kullan\u0131c\u0131 profilini ve g\u00f6nderileri REST API arac\u0131l\u0131\u011f\u0131yla y\u00f6netirken, anl\u0131k mesajla\u015fma ve bildirimler i\u00e7in WebSockets kullanabilir. Bu iki farkl\u0131 protokol\u00fc ayn\u0131 sunucuda bar\u0131nd\u0131rmak, altyap\u0131 y\u00f6netimini basitle\u015ftirir, maliyetleri d\u00fc\u015f\u00fcr\u00fcr ve uygulama entegrasyonunu kolayla\u015ft\u0131r\u0131r.<\/p>\n<h3>Ayn\u0131 Sunucuda Birlikte \u00c7al\u0131\u015ft\u0131rma Yakla\u015f\u0131mlar\u0131<\/h3>\n<p>REST ve WebSockets&#8217;\u0131 ayn\u0131 sunucuda bar\u0131nd\u0131rmak i\u00e7in farkl\u0131 mimari yakla\u015f\u0131mlar mevcuttur. Se\u00e7iminiz, projenizin karma\u015f\u0131kl\u0131\u011f\u0131na, \u00f6l\u00e7eklenebilirlik ihtiya\u00e7lar\u0131na ve kullan\u0131lan teknoloji y\u0131\u011f\u0131n\u0131na ba\u011fl\u0131 olacakt\u0131r.<\/p>\n<h4>Tek Sunucu, Farkl\u0131 Portlar<\/h4>\n<p>Bu, en basit yakla\u015f\u0131mlardan biridir. REST API&#8217;niz bir portta (\u00f6rne\u011fin 8080), WebSocket sunucunuz ise ba\u015fka bir portta (\u00f6rne\u011fin 8081) \u00e7al\u0131\u015f\u0131r. \u0130stemciler, ihtiya\u00e7 duyduklar\u0131 protokole g\u00f6re ilgili porta ba\u011flan\u0131r.<\/p>\n<ul>\n<li><strong>Avantajlar:<\/strong> Kurulumu kolayd\u0131r, birbirinden ba\u011f\u0131ms\u0131z \u00e7al\u0131\u015f\u0131rlar.<\/li>\n<li><strong>Dezavantajlar:<\/strong> G\u00fcvenlik duvar\u0131 ayarlar\u0131 gerektirebilir, istemci taraf\u0131nda farkl\u0131 portlar\u0131 y\u00f6netmek gerekebilir.<\/li>\n<\/ul>\n<h4>Tek Sunucu, Ayn\u0131 Port \u00dczerinde Path Bazl\u0131 Y\u00f6nlendirme<\/h4>\n<p>Bu yakla\u015f\u0131mda, hem REST hem de WebSockets ayn\u0131 port \u00fczerinde \u00e7al\u0131\u015f\u0131r, ancak farkl\u0131 URL yollar\u0131 (path) kullan\u0131rlar. \u00d6rne\u011fin, <code>\/api<\/code> yolu REST istekleri i\u00e7in kullan\u0131l\u0131rken, <code>\/ws<\/code> yolu WebSocket ba\u011flant\u0131lar\u0131 i\u00e7in kullan\u0131l\u0131r. Bu, genellikle bir ters proxy (reverse proxy) veya uygulama sunucusunun kendisi taraf\u0131ndan y\u00f6netilir.<\/p>\n<ul>\n<li><strong>Avantajlar:<\/strong> Tek bir port \u00fczerinden eri\u015fim, g\u00fcvenlik duvar\u0131 sorunlar\u0131n\u0131 azalt\u0131r.<\/li>\n<li><strong>Dezavantajlar:<\/strong> Yap\u0131land\u0131rma biraz daha karma\u015f\u0131k olabilir.<\/li>\n<\/ul>\n<h4>Reverse Proxy Kullan\u0131m\u0131 (Nginx\/Apache)<\/h4>\n<p>Bir ters proxy (\u00f6rne\u011fin Nginx veya Apache), istemci isteklerini al\u0131r ve bunlar\u0131 uygun arka u\u00e7 hizmetine (REST API veya WebSocket sunucusu) y\u00f6nlendirir. Bu, \u00f6zellikle ayn\u0131 port \u00fczerinde farkl\u0131 yollarla eri\u015fim sa\u011flamak i\u00e7in g\u00fc\u00e7l\u00fc bir y\u00f6ntemdir ve SSL sonland\u0131rma, y\u00fck dengeleme gibi ek avantajlar sunar.<\/p>\n<ul>\n<li><strong>Avantajlar:<\/strong> Merkezi trafik y\u00f6netimi, SSL sonland\u0131rma, y\u00fck dengeleme, g\u00fcvenlik katman\u0131 sa\u011flar.<\/li>\n<li><strong>Dezavantajlar:<\/strong> Ek bir bile\u015fen ve yap\u0131land\u0131rma gerektirir.<\/li>\n<\/ul>\n<h4>Ortak Bir Framework ile Y\u00f6netim (Node.js Express\/Socket.IO, Python Flask\/Flask-SocketIO)<\/h4>\n<p>Baz\u0131 web framework&#8217;leri, hem HTTP (REST) hem de WebSocket sunucular\u0131n\u0131 ayn\u0131 uygulama i\u00e7inde kolayca entegre etme yetene\u011fi sunar. \u00d6rne\u011fin, Node.js&#8217;te Express ve Socket.IO veya Python&#8217;da Flask ve Flask-SocketIO bu t\u00fcr entegrasyonlar\u0131 basitle\u015ftirir.<\/p>\n<ul>\n<li><strong>Avantajlar:<\/strong> Tek bir kod taban\u0131nda y\u00f6netim, kolay entegrasyon.<\/li>\n<li><strong>Dezavantajlar:<\/strong> Framework&#8217;\u00fcn yetenekleriyle s\u0131n\u0131rl\u0131 olabilir.<\/li>\n<\/ul>\n<h3>Uygulama Geli\u015ftirme Ortam\u0131n\u0131n Haz\u0131rlanmas\u0131<\/h3>\n<p>Uygulaman\u0131z\u0131 geli\u015ftirmeye ba\u015flamadan \u00f6nce, gerekli ara\u00e7lar\u0131 ve ortam\u0131 kurman\u0131z \u00f6nemlidir. Bu b\u00f6l\u00fcmde, \u00f6rnek bir Node.js tabanl\u0131 uygulama i\u00e7in ortam kurulumunu ele alaca\u011f\u0131z.<\/p>\n<h4>Gerekli Yaz\u0131l\u0131mlar\u0131n Kurulumu<\/h4>\n<p>\u00d6rne\u011fimiz i\u00e7in Node.js, npm (Node Package Manager) ve bir ters proxy olarak Nginx&#8217;e ihtiyac\u0131m\u0131z olacak.<\/p>\n<ul>\n<li><strong>Node.js ve npm:<\/strong> <a href=\"https:\/\/nodejs.org\/\" target=\"_blank\">nodejs.org<\/a> adresinden i\u015fletim sisteminize uygun s\u00fcr\u00fcm\u00fc indirip kurun. Kurulumdan sonra terminalde <code>node -v<\/code> ve <code>npm -v<\/code> komutlar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rarak do\u011frulu\u011funu kontrol edebilirsiniz.<\/li>\n<li><strong>Nginx:<\/strong> Linux da\u011f\u0131t\u0131mlar\u0131nda genellikle paket y\u00f6neticileri arac\u0131l\u0131\u011f\u0131yla (\u00f6rn: <code>sudo apt install nginx<\/code>), di\u011fer i\u015fletim sistemlerinde ise resmi web sitesinden (<a href=\"https:\/\/nginx.org\/\" target=\"_blank\">nginx.org<\/a>) indirilebilir.<\/li>\n<\/ul>\n<h4>Proje Yap\u0131s\u0131n\u0131n Olu\u015fturulmas\u0131<\/h4>\n<p>Yeni bir Node.js projesi ba\u015flatarak temel dosya yap\u0131s\u0131n\u0131 olu\u015ftural\u0131m.<\/p>\n<pre><code>\nmkdir rest-websocket-app\ncd rest-websocket-app\nnpm init -y\n<\/pre>\n<p><\/code><\/p>\n<p>Bu komutlar, projeniz i\u00e7in bir dizin olu\u015fturacak ve temel bir <code>package.json<\/code> dosyas\u0131 ba\u015flatacakt\u0131r.<\/p>\n<h4>Ba\u011f\u0131ml\u0131l\u0131klar\u0131n Y\u00f6netimi<\/h4>\n<p>REST API i\u00e7in Express ve WebSocket ileti\u015fimi i\u00e7in Socket.IO k\u00fct\u00fcphanelerini kuraca\u011f\u0131z.<\/p>\n<pre><code>\nnpm install express socket.io\n<\/pre>\n<p><\/code><\/p>\n<p>Bu komut, <code>express<\/code> ve <code>socket.io<\/code> paketlerini projenize ba\u011f\u0131ml\u0131l\u0131k olarak ekleyecektir.<\/p>\n<h3>\u00d6rnek Uygulama: Node.js ile REST ve WebSockets<\/h3>\n<p>\u015eimdi, Node.js ve Express\/Socket.IO kullanarak hem REST API hem de WebSocket sunucusunu ayn\u0131 uygulama i\u00e7inde nas\u0131l entegre edece\u011fimize dair basit bir \u00f6rnek olu\u015ftural\u0131m.<\/p>\n<h4>Express ile REST API Olu\u015fturma<\/h4>\n<p><code>app.js<\/code> ad\u0131nda bir dosya olu\u015ftural\u0131m ve i\u00e7ine basit bir Express REST API ekleyelim.<\/p>\n<pre><code class=\"language-javascript\">\n\/\/ app.js - REST API k\u0131sm\u0131\nconst express = require('express');\nconst app = express();\nconst PORT = process.env.PORT || 3000;\n\napp.use(express.json()); \/\/ JSON body parsing i\u00e7in\n\n\/\/ Basit bir REST GET endpoint'i\napp.get('\/api\/merhaba', (req, res) => {\n    res.json({ mesaj: 'Merhaba REST API!' });\n});\n\n\/\/ Basit bir REST POST endpoint'i\napp.post('\/api\/gonder', (req, res) => {\n    const veri = req.body.veri || 'Veri yok';\n    console.log('REST POST iste\u011fi al\u0131nd\u0131:', veri);\n    res.status(200).json({ durum: 'ba\u015far\u0131l\u0131', al\u0131nanVeri: veri });\n});\n\n\/\/ Sunucuyu ba\u015flat (\u015fimdilik sadece REST i\u00e7in)\n\/\/ app.listen(PORT, () => {\n\/\/     console.log(<code>REST API ${PORT} portunda \u00e7al\u0131\u015f\u0131yor.<\/code>);\n\/\/ });\n<\/pre>\n<p><\/code><\/p>\n<h4>Socket.IO ile WebSocket Sunucusu Kurma<\/h4>\n<p>Ayn\u0131 <code>app.js<\/code> dosyas\u0131na Socket.IO sunucusunu entegre edelim. Socket.IO, HTTP sunucusunun \u00fczerine kurulabilir.<\/p>\n<pre><code class=\"language-javascript\">\n\/\/ app.js - WebSocket k\u0131sm\u0131 (\u00f6nceki kodun alt\u0131na ekleyin)\nconst http = require('http');\nconst socketIo = require('socket.io');\n\n\/\/ Express uygulamas\u0131n\u0131 bir HTTP sunucusuna ba\u011fla\nconst server = http.createServer(app);\nconst io = socketIo(server);\n\n\/\/ WebSocket ba\u011flant\u0131lar\u0131n\u0131 dinle\nio.on('connection', (socket) => {\n    console.log('Yeni bir WebSocket ba\u011flant\u0131s\u0131 kuruldu.');\n\n    \/\/ \u0130stemciden gelen mesajlar\u0131 dinle\n    socket.on('mesajGonder', (data) => {\n        console.log('WebSocket mesaj\u0131 al\u0131nd\u0131:', data);\n        \/\/ Gelen mesaj\u0131 t\u00fcm ba\u011fl\u0131 istemcilere geri g\u00f6nder\n        io.emit('yeniMesaj', <code>Sunucudan: ${data.text}<\/code>);\n    });\n\n    \/\/ Ba\u011flant\u0131 kesildi\u011finde\n    socket.on('disconnect', () => {\n        console.log('Bir WebSocket ba\u011flant\u0131s\u0131 kesildi.');\n    });\n});\n\n\/\/ Sunucuyu ba\u015flat (hem REST hem de WebSocket i\u00e7in)\nserver.listen(PORT, () => {\n    console.log(<code>Sunucu ${PORT} portunda \u00e7al\u0131\u015f\u0131yor (REST ve WebSockets).<\/code>);\n});\n<\/pre>\n<p><\/code><\/p>\n<h4>Ayn\u0131 Sunucu \u00dczerinde Entegrasyon<\/h4>\n<p>Yukar\u0131daki kod par\u00e7ac\u0131klar\u0131, <code>app.js<\/code> dosyas\u0131nda birle\u015ftirildi\u011finde, hem Express tabanl\u0131 REST API'nizi hem de Socket.IO tabanl\u0131 WebSocket sunucunuzu ayn\u0131 Node.js s\u00fcrecinde ve ayn\u0131 port \u00fczerinde \u00e7al\u0131\u015ft\u0131racakt\u0131r. Express uygulamas\u0131 HTTP isteklerini i\u015flerken, Socket.IO ayn\u0131 HTTP sunucusu \u00fczerinden WebSocket el s\u0131k\u0131\u015fmalar\u0131n\u0131 ve sonraki \u00e7ift y\u00f6nl\u00fc ileti\u015fimi y\u00f6netir.<\/p>\n<p>Bu entegrasyon, \u00f6zellikle k\u00fc\u00e7\u00fck ve orta \u00f6l\u00e7ekli uygulamalar i\u00e7in olduk\u00e7a verimlidir. Tek bir kod taban\u0131, tek bir s\u00fcre\u00e7 ve tek bir port \u00fczerinden hem geleneksel API isteklerini hem de ger\u00e7ek zamanl\u0131 ileti\u015fim ihtiya\u00e7lar\u0131n\u0131 kar\u015f\u0131layabilirsiniz.<\/p>\n<h3>Reverse Proxy (Nginx) ile Y\u00f6nlendirme<\/h3>\n<p>\u00dcretim ortamlar\u0131nda veya daha karma\u015f\u0131k senaryolarda, Nginx gibi bir ters proxy kullanmak, hem REST hem de WebSockets trafi\u011fini y\u00f6netmek i\u00e7in tercih edilen bir y\u00f6ntemdir. Nginx, gelen istekleri dinleyebilir ve belirli yollara veya ko\u015fullara g\u00f6re farkl\u0131 arka u\u00e7 hizmetlerine y\u00f6nlendirebilir.<\/p>\n<h4>Nginx Kurulumu ve Temel Yap\u0131land\u0131rma<\/h4>\n<p>Nginx'i kurduktan sonra, genellikle <code>\/etc\/nginx\/sites-available\/<\/code> dizininde bir yap\u0131land\u0131rma dosyas\u0131 olu\u015fturman\u0131z gerekir. \u00d6rne\u011fin, <code>\/etc\/nginx\/sites-available\/rest-websocket-app<\/code>.<\/p>\n<h4>REST API i\u00e7in Proxy Yap\u0131land\u0131rmas\u0131<\/h4>\n<p>Nginx, gelen <code>\/api<\/code> isteklerini Node.js uygulaman\u0131z\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131 porta y\u00f6nlendirecektir.<\/p>\n<pre><code class=\"language-nginx\">\n# Nginx yap\u0131land\u0131rma dosyas\u0131 (\/etc\/nginx\/sites-available\/rest-websocket-app)\nserver {\n    listen 80;\n    server_name your_domain.com; # Alan ad\u0131n\u0131z\u0131 buraya yaz\u0131n\n\n    location \/api\/ {\n        proxy_pass http:\/\/localhost:3000; # Node.js uygulaman\u0131z\u0131n portu\n        proxy_http_version 1.1;\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n    }\n    \n    # Di\u011fer statik dosyalar veya ana sayfa i\u00e7in\n    location \/ {\n        root \/var\/www\/html; # Frontend dosyalar\u0131n\u0131z\u0131n yolu\n        index index.html;\n        try_files $uri $uri\/ =404;\n    }\n}\n<\/pre>\n<p><\/code><\/p>\n<h4>WebSocket i\u00e7in Proxy Yap\u0131land\u0131rmas\u0131<\/h4>\n<p>WebSockets i\u00e7in Nginx'in \u00f6zel ba\u015fl\u0131klar\u0131 (<code>Upgrade<\/code> ve <code>Connection<\/code>) do\u011fru \u015fekilde iletmesi gerekir. Bu, HTTP ba\u011flant\u0131s\u0131n\u0131n WebSocket'e y\u00fckseltilmesini sa\u011flar.<\/p>\n<pre><code class=\"language-nginx\">\n# Nginx yap\u0131land\u0131rma dosyas\u0131 (devam\u0131)\nserver {\n    listen 80;\n    server_name your_domain.com; # Alan ad\u0131n\u0131z\u0131 buraya yaz\u0131n\n\n    location \/socket.io\/ { # Socket.IO'nun varsay\u0131lan yolu\n        proxy_pass http:\/\/localhost:3000; # Node.js uygulaman\u0131z\u0131n portu\n        proxy_http_version 1.1;\n        proxy_set_header Upgrade $http_upgrade;\n        proxy_set_header Connection \"upgrade\";\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n    }\n\n    # ... (\u00f6nceki \/api\/ ve \/ location bloklar\u0131)\n}\n<\/pre>\n<p><\/code><\/p>\n<p>Yap\u0131land\u0131rma dosyas\u0131n\u0131 kaydettikten sonra, onu <code>sites-enabled<\/code> dizinine sembolik olarak ba\u011flay\u0131n ve Nginx'i yeniden ba\u015flat\u0131n:<\/p>\n<pre><code>\nsudo ln -s \/etc\/nginx\/sites-available\/rest-websocket-app \/etc\/nginx\/sites-enabled\/\nsudo nginx -t # Yap\u0131land\u0131rmay\u0131 test et\nsudo systemctl restart nginx # Nginx'i yeniden ba\u015flat\n<\/pre>\n<p><\/code><\/p>\n<p>Bu yap\u0131land\u0131rma ile, <code>your_domain.com\/api\/...<\/code> adresine gelen istekler Node.js uygulaman\u0131z\u0131n REST API'sine, <code>your_domain.com\/socket.io\/...<\/code> adresine gelen istekler ise WebSocket sunucunuza y\u00f6nlendirilecektir. Bu, tek bir alan ad\u0131 ve port \u00fczerinden hem REST hem de WebSocket hizmetlerini sunman\u0131za olanak tan\u0131r.<\/p>\n<h3>G\u00fcvenlik ve Performans Konular\u0131<\/h3>\n<p>Herhangi bir \u00fcretim uygulamas\u0131 da\u011f\u0131t\u0131rken g\u00fcvenlik ve performans kritik \u00f6neme sahiptir. REST ve WebSockets'\u0131 birlikte sunarken dikkat etmeniz gereken baz\u0131 noktalar \u015funlard\u0131r:<\/p>\n<h4>SSL\/TLS Kullan\u0131m\u0131<\/h4>\n<p>T\u00fcm \u00fcretim uygulamalar\u0131 i\u00e7in HTTPS kullanmak zorunludur. Nginx gibi bir ters proxy kullanarak SSL\/TLS sonland\u0131rmas\u0131n\u0131 kolayca yap\u0131land\u0131rabilirsiniz (\u00f6rne\u011fin Let's Encrypt ile). Bu, hem REST API trafi\u011finizi hem de WebSocket trafi\u011finizi \u015fifreleyerek veri g\u00fcvenli\u011fini sa\u011flar. WebSocket ba\u011flant\u0131lar\u0131 i\u00e7in <code>wss:\/\/<\/code> protokol\u00fcn\u00fc kullanmal\u0131s\u0131n\u0131z.<\/p>\n<h4>Kimlik Do\u011frulama ve Yetkilendirme<\/h4>\n<p>Hem REST API'niz hem de WebSocket ba\u011flant\u0131lar\u0131n\u0131z i\u00e7in uygun kimlik do\u011frulama ve yetkilendirme mekanizmalar\u0131 uygulay\u0131n. REST i\u00e7in genellikle JWT (JSON Web Tokens) veya oturum tabanl\u0131 kimlik do\u011frulama kullan\u0131l\u0131r. WebSockets i\u00e7in ise, ba\u011flant\u0131 kurulurken veya ilk mesaj g\u00f6nderilirken bir kimlik do\u011frulama token'\u0131 (\u00f6rne\u011fin JWT) g\u00f6ndermek yayg\u0131n bir yakla\u015f\u0131md\u0131r. Sunucu taraf\u0131nda, bu token'\u0131 do\u011frulayarak kullan\u0131c\u0131n\u0131n yetkilerini kontrol edebilirsiniz.<\/p>\n<h4>Rate Limiting ve DoS Korumas\u0131<\/h4>\n<p>REST API'lerinizde k\u00f6t\u00fc niyetli veya a\u015f\u0131r\u0131 istekleri engellemek i\u00e7in rate limiting (istek s\u0131n\u0131rlama) uygulay\u0131n. Nginx, bu konuda yerle\u015fik yeteneklere sahiptir. WebSocket ba\u011flant\u0131lar\u0131 i\u00e7in de, tek bir IP adresinden gelen a\u015f\u0131r\u0131 ba\u011flant\u0131 giri\u015fimlerini veya mesaj ak\u0131\u015f\u0131n\u0131 izleyerek DoS (Denial of Service) sald\u0131r\u0131lar\u0131na kar\u015f\u0131 koruma sa\u011flayabilirsiniz.<\/p>\n<h4>\u00d6l\u00e7eklenebilirlik \u0130\u00e7in \u0130pu\u00e7lar\u0131<\/h4>\n<ul>\n<li><strong>Y\u00fck Dengeleme:<\/strong> Trafik artt\u0131\u011f\u0131nda, birden fazla uygulama \u00f6rne\u011fini (REST ve WebSocket) bir y\u00fck dengeleyici arkas\u0131na yerle\u015ftirin. Nginx, hem REST hem de WebSockets i\u00e7in y\u00fck dengeleme yapabilir.<\/li>\n<li><strong>Durum Y\u00f6netimi:<\/strong> REST do\u011fas\u0131 gere\u011fi durum bilgisizdir. WebSocket'lar ise kal\u0131c\u0131 ba\u011flant\u0131lar kurar. E\u011fer WebSocket sunucunuzda oturum durumu tutuyorsan\u0131z ve birden fazla sunucu kullan\u0131yorsan\u0131z, bu durumu Redis gibi harici bir depoda y\u00f6netmeyi d\u00fc\u015f\u00fcn\u00fcn (\u00f6rne\u011fin Socket.IO'nun Redis adapt\u00f6r\u00fc).<\/li>\n<li><strong>Veritaban\u0131 ve Mesaj Kuyruklar\u0131:<\/strong> Y\u00fcksek trafikli uygulamalarda, veritaban\u0131 i\u015flemlerini optimize edin ve asenkron g\u00f6revler i\u00e7in RabbitMQ veya Kafka gibi mesaj kuyruklar\u0131 kullanmay\u0131 de\u011ferlendirin.<\/li>\n<\/ul>\n<h3>Sonu\u00e7<\/h3>\n<p>Ayn\u0131 sunucuda hem REST API hem de ger\u00e7ek zamanl\u0131 ileti\u015fim protokollerini (WebSockets gibi) bar\u0131nd\u0131rmak, modern web uygulamalar\u0131 i\u00e7in yayg\u0131n ve etkili bir yakla\u015f\u0131md\u0131r. Bu entegrasyon, uygulaman\u0131z\u0131n hem geleneksel veri al\u0131\u015fveri\u015fi ihtiya\u00e7lar\u0131n\u0131 hem de anl\u0131k etkile\u015fim gereksinimlerini tek bir altyap\u0131 \u00fczerinden kar\u015f\u0131lamas\u0131na olanak tan\u0131r. Do\u011fru mimariyi se\u00e7mek, g\u00fcvenlik \u00f6nlemlerini almak ve performans\u0131 optimize etmek, ba\u015far\u0131l\u0131 bir da\u011f\u0131t\u0131m i\u00e7in kritik \u00f6neme sahiptir. Node.js gibi teknolojiler ve Nginx gibi ters proxy'ler, bu s\u00fcreci olduk\u00e7a basitle\u015ftirir ve geli\u015ftiricilere g\u00fc\u00e7l\u00fc, esnek \u00e7\u00f6z\u00fcmler sunar.<\/p>\n<h3>SSS (S\u0131k Sorulan Sorular)<\/h3>\n<h4>Neden iki farkl\u0131 protokol kullanmal\u0131y\u0131m?<\/h4>\n<p>REST, kaynak tabanl\u0131, durum bilgisiz veri al\u0131\u015fveri\u015fi i\u00e7in optimize edilmi\u015ftir ve genellikle CRUD operasyonlar\u0131 i\u00e7in idealdir. WebSockets ise, d\u00fc\u015f\u00fck gecikmeli, \u00e7ift y\u00f6nl\u00fc ve kal\u0131c\u0131 ba\u011flant\u0131lar gerektiren ger\u00e7ek zamanl\u0131 uygulamalar (sohbet, bildirimler, canl\u0131 g\u00fcncellemeler) i\u00e7in daha uygundur. \u0130ki protokol\u00fc bir arada kullanmak, uygulaman\u0131z\u0131n her iki d\u00fcnyan\u0131n da en iyi \u00f6zelliklerinden faydalanmas\u0131n\u0131 sa\u011flar.<\/p>\n<h4>Ayn\u0131 portta \u00e7al\u0131\u015fmak performans\u0131 etkiler mi?<\/h4>\n<p>Genellikle hay\u0131r. Modern web sunucular\u0131 ve framework'ler, ayn\u0131 port \u00fczerinde HTTP ve WebSocket trafi\u011fini verimli bir \u015fekilde y\u00f6netmek \u00fczere tasarlanm\u0131\u015ft\u0131r. Ters proxy'ler (Nginx gibi) de bu trafi\u011fi sorunsuz bir \u015fekilde y\u00f6nlendirebilir. Performans sorunlar\u0131 genellikle uygulaman\u0131n kendi i\u00e7 mant\u0131\u011f\u0131ndan, veritaban\u0131 eri\u015fiminden veya yetersiz sunucu kaynaklar\u0131ndan kaynaklan\u0131r, protokollerin ayn\u0131 portta \u00e7al\u0131\u015fmas\u0131ndan de\u011fil.<\/p>\n<h4>Hangi teknolojiyi se\u00e7meliyim (Node.js, Python, Go vb.)?<\/h4>\n<p>Se\u00e7iminiz, projenizin gereksinimlerine, ekibinizin uzmanl\u0131\u011f\u0131na ve performans beklentilerinize ba\u011fl\u0131d\u0131r. Node.js (Express ve Socket.IO ile), asenkron yap\u0131s\u0131 sayesinde hem REST hem de WebSockets i\u00e7in olduk\u00e7a pop\u00fcler ve etkilidir. Python (Flask\/Django ve Flask-SocketIO\/Django Channels ile) veya Go (Gorilla WebSocket gibi k\u00fct\u00fcphanelerle) da bu t\u00fcr uygulamalar i\u00e7in g\u00fc\u00e7l\u00fc alternatiflerdir. \u00d6nemli olan, se\u00e7ti\u011finiz teknolojinin ger\u00e7ek zamanl\u0131 ileti\u015fim ve HTTP isteklerini ayn\u0131 anda i\u015fleyebilme yetene\u011fidir.<\/p>\n<h4>G\u00fcvenlik i\u00e7in nelere dikkat etmeliyim?<\/h4>\n<p>Mutlaka SSL\/TLS (HTTPS\/WSS) kullan\u0131n. Hem REST hem de WebSocket ba\u011flant\u0131lar\u0131 i\u00e7in g\u00fc\u00e7l\u00fc kimlik do\u011frulama ve yetkilendirme mekanizmalar\u0131 uygulay\u0131n. Gelen verileri her zaman do\u011frulay\u0131n ve sanitasyon yap\u0131n. Rate limiting ve DoS korumas\u0131 gibi \u00f6nlemlerle sunucunuzu k\u00f6t\u00fc niyetli sald\u0131r\u0131lardan koruyun. G\u00fcvenlik ba\u015fl\u0131klar\u0131n\u0131 (Content Security Policy, X-Frame-Options vb.) do\u011fru yap\u0131land\u0131r\u0131n.<\/p>\n","protected":false},"excerpt":{"rendered":"G\u00fcn\u00fcm\u00fcz modern web uygulamalar\u0131, farkl\u0131 ileti\u015fim ihtiya\u00e7lar\u0131na y\u00f6nelik \u00e7e\u015fitli protokoller kullanmaktad\u0131r. Geleneksel olarak kaynak tabanl\u0131 veri&#8230;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-37252","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Ayn\u0131 Sunucuda REST ve Ger\u00e7ek Zamanl\u0131 \u0130leti\u015fim Protokollerini (\u00d6rn: WebSockets) Birlikte Sunma Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/ayni-sunucuda-rest-ve-gercek-zamanli-iletisim-protokollerini-orn-websockets-birlikte-sunma-rehberi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ayn\u0131 Sunucuda REST ve Ger\u00e7ek Zamanl\u0131 \u0130leti\u015fim Protokollerini (\u00d6rn: WebSockets) Birlikte Sunma Rehberi\" \/>\n<meta property=\"og:description\" content=\"G\u00fcn\u00fcm\u00fcz modern web uygulamalar\u0131, farkl\u0131 ileti\u015fim ihtiya\u00e7lar\u0131na y\u00f6nelik \u00e7e\u015fitli protokoller kullanmaktad\u0131r. Geleneksel olarak kaynak tabanl\u0131 veri...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/ayni-sunucuda-rest-ve-gercek-zamanli-iletisim-protokollerini-orn-websockets-birlikte-sunma-rehberi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-29T10:00:42+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"14 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ayni-sunucuda-rest-ve-gercek-zamanli-iletisim-protokollerini-orn-websockets-birlikte-sunma-rehberi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ayni-sunucuda-rest-ve-gercek-zamanli-iletisim-protokollerini-orn-websockets-birlikte-sunma-rehberi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Ayn\u0131 Sunucuda REST ve Ger\u00e7ek Zamanl\u0131 \u0130leti\u015fim Protokollerini (\u00d6rn: WebSockets) Birlikte Sunma Rehberi\",\"datePublished\":\"2025-12-29T10:00:42+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ayni-sunucuda-rest-ve-gercek-zamanli-iletisim-protokollerini-orn-websockets-birlikte-sunma-rehberi\/\"},\"wordCount\":2303,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/ayni-sunucuda-rest-ve-gercek-zamanli-iletisim-protokollerini-orn-websockets-birlikte-sunma-rehberi\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ayni-sunucuda-rest-ve-gercek-zamanli-iletisim-protokollerini-orn-websockets-birlikte-sunma-rehberi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/ayni-sunucuda-rest-ve-gercek-zamanli-iletisim-protokollerini-orn-websockets-birlikte-sunma-rehberi\/\",\"name\":\"Ayn\u0131 Sunucuda REST ve Ger\u00e7ek Zamanl\u0131 \u0130leti\u015fim Protokollerini (\u00d6rn: WebSockets) Birlikte Sunma Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-12-29T10:00:42+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ayni-sunucuda-rest-ve-gercek-zamanli-iletisim-protokollerini-orn-websockets-birlikte-sunma-rehberi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/ayni-sunucuda-rest-ve-gercek-zamanli-iletisim-protokollerini-orn-websockets-birlikte-sunma-rehberi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ayni-sunucuda-rest-ve-gercek-zamanli-iletisim-protokollerini-orn-websockets-birlikte-sunma-rehberi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ayn\u0131 Sunucuda REST ve Ger\u00e7ek Zamanl\u0131 \u0130leti\u015fim Protokollerini (\u00d6rn: WebSockets) Birlikte Sunma Rehberi\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Ayn\u0131 Sunucuda REST ve Ger\u00e7ek Zamanl\u0131 \u0130leti\u015fim Protokollerini (\u00d6rn: WebSockets) Birlikte Sunma Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/ayni-sunucuda-rest-ve-gercek-zamanli-iletisim-protokollerini-orn-websockets-birlikte-sunma-rehberi\/","og_locale":"tr_TR","og_type":"article","og_title":"Ayn\u0131 Sunucuda REST ve Ger\u00e7ek Zamanl\u0131 \u0130leti\u015fim Protokollerini (\u00d6rn: WebSockets) Birlikte Sunma Rehberi","og_description":"G\u00fcn\u00fcm\u00fcz modern web uygulamalar\u0131, farkl\u0131 ileti\u015fim ihtiya\u00e7lar\u0131na y\u00f6nelik \u00e7e\u015fitli protokoller kullanmaktad\u0131r. Geleneksel olarak kaynak tabanl\u0131 veri...","og_url":"https:\/\/fatihsoysal.com\/blog\/ayni-sunucuda-rest-ve-gercek-zamanli-iletisim-protokollerini-orn-websockets-birlikte-sunma-rehberi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-12-29T10:00:42+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"14 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/ayni-sunucuda-rest-ve-gercek-zamanli-iletisim-protokollerini-orn-websockets-birlikte-sunma-rehberi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/ayni-sunucuda-rest-ve-gercek-zamanli-iletisim-protokollerini-orn-websockets-birlikte-sunma-rehberi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Ayn\u0131 Sunucuda REST ve Ger\u00e7ek Zamanl\u0131 \u0130leti\u015fim Protokollerini (\u00d6rn: WebSockets) Birlikte Sunma Rehberi","datePublished":"2025-12-29T10:00:42+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/ayni-sunucuda-rest-ve-gercek-zamanli-iletisim-protokollerini-orn-websockets-birlikte-sunma-rehberi\/"},"wordCount":2303,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/ayni-sunucuda-rest-ve-gercek-zamanli-iletisim-protokollerini-orn-websockets-birlikte-sunma-rehberi\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/ayni-sunucuda-rest-ve-gercek-zamanli-iletisim-protokollerini-orn-websockets-birlikte-sunma-rehberi\/","url":"https:\/\/fatihsoysal.com\/blog\/ayni-sunucuda-rest-ve-gercek-zamanli-iletisim-protokollerini-orn-websockets-birlikte-sunma-rehberi\/","name":"Ayn\u0131 Sunucuda REST ve Ger\u00e7ek Zamanl\u0131 \u0130leti\u015fim Protokollerini (\u00d6rn: WebSockets) Birlikte Sunma Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-12-29T10:00:42+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/ayni-sunucuda-rest-ve-gercek-zamanli-iletisim-protokollerini-orn-websockets-birlikte-sunma-rehberi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/ayni-sunucuda-rest-ve-gercek-zamanli-iletisim-protokollerini-orn-websockets-birlikte-sunma-rehberi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/ayni-sunucuda-rest-ve-gercek-zamanli-iletisim-protokollerini-orn-websockets-birlikte-sunma-rehberi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Ayn\u0131 Sunucuda REST ve Ger\u00e7ek Zamanl\u0131 \u0130leti\u015fim Protokollerini (\u00d6rn: WebSockets) Birlikte Sunma Rehberi"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/37252","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=37252"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/37252\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=37252"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=37252"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=37252"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}