Php ve socketio kullanarak realtime haberleşme veri alma ve gönderme işlemini uygulamalı olarak sizler için tüm detaylarıyla anlattım. Konunun önemini kısaca bahsedeyim php senkron bir programlama dili(thread basic) ve sayfa yenilenmeden veri gönderme alma işlemlerini yapamaz. Burada javascript yani asenkron programlama dili ile birlikte kullanarak arka taraftan sayfa yenilenmeden işlemleri yapacağız.
Buda bize zaman vede tekrar sayfa yeniden yüklenmesi olmadığı için server(sunucu)da ek maliyet çıkartmamayı sağlayacak.
Php ile sayfa yenilenmeden veri gönderme ve alma işlemlerini jquery, ajax kullanarakta yapabiliriz.
Asenkron Nedir?
Javascipt her istek kendi içerisinde asenkron programlama non bloking Event based olarak çalışır. Aynı anda 2 istek geldiğinde sıraya koymaz ikisinide işleme alır hangisi daha önce biterse onu geri döner bekleme yapmaz.
Php thread basic sistemde istekler sıraya konarak senkron programlama olarak çalışır. Listelenmiş istekler sıraya konur ve biri bitmeden diğerine geçmez.
Neden Socket.io kullanılmalı
Canlı yada anlık kullanıcı sayısı ve hiti yüksek site platformlarında bu işlemler her biri istek attığı için sunucuyu yorar ve kapanmasına, yanmasına yada korumaya alarak tekrar başlamasına neden olur. İnternet kullanıcısı hıza önem verir işlemini yapamadığında sitenizden çıkar ve sitenize bir daha gelmeyedebilirde. Örnek: ösym gibi :)
Bu yüzden javascript nodejs freamworkünü ve socket.io npm paketini kullanacağız. Hazırsanız başlayalım :)
Nodejs nasıl kurulur?
Ubuntu Sunucuya veya mac,linux işletim sistemlerine Terminalden Nodejs Kurulumunu yapalım
//Nodejs curl ile indirelim curl -fsSL https://deb.nodesource.com/setup_14.x | sudo -E bash - //Kurulumu tamamlama komutu sudo apt-get install -y nodejs //Nodejs Versiyon soralım: node -v //Npm Versiyonunu Soralım npm -v //Versiyon numaralarını alabiliyorsak nodejs ve npm yüklenmiştir. //Not: killall node // komutu bütün node procesleri oldürür.
Ubuntu Sunucuya Socket.io’yu kurmak
Socket.io tcp dinleme işlemlerinde (on,emit) metodları ile mesaj alma ve gönderme işlemi yapar. Yani Wepsockets bir tcp bağlantısı ile çift yönlü mesaj gönderme yapabilen bir protokoldür. Bu protoköl ile tarayıcı ile sunucu arasında sürekli açık olan bir tcp bağlantısı oluşturulur. İsteyen taraf diğer tarafa mesaj gönderebilir.
//socket.io’yu, nodejs’in paket yöneticisi olan npm ile kuracağız. npm init -y //Artık socket.io’yu kurabiliriz. npm install --save socket.io //local localhost:5000 //Sunucu IP_ADRESI:5000 //Sunucu socket.io.js ipadresiniz:5000/socket.io/socket.io.js
Eğer sizde "bu siteye ulaşılamıyor" localden 5000 portu üzerinden yani urlde localhost:5000 yazdığınızda sayfa açılmıyorsa socket hatalı olmuş. Hata olarak sizden kaynaklı değil socket.io ve npm sürümlerinin uyuşmazlığından kaynaklanıyor.
nodejs npm paketlerinin uyumlu hale getirilmesi gayet basittir. Ilk olarak versiyon kontrollerini yapalım nodejs, npm ve socket.io olarak sonra bunların uyumlu olduğu paket yapısını bulup var olan socket.io paketini silip uyumlu olan halini tekrar yükleyelim. Sırasıyla işlemleri uygulamalı sizde yapın
//package.json da socketio versiyonu bende ("socket.io": "^4.1.3") //node sürümü bilgisayarımda node -v komutu ile (v10.13.0) //npm paket sürümü bilgisayarımda npm -v (6.9.0) //Var olan paketi silelim npm uninstall socket.io //Uyumlu paketi yükleyelim npm install --save [email protected]
Ubuntu Sunucu üzerinde Socket.io Nodejs Server ayarları
Sunucumuz üzerinde nodejs http serverını ayağa kaldıralım ve daha sonra belirlediğimiz bir port üzerinden socket.io çalıştırarak php ile socket bağlantısı kurarak realtime veri gönderelim.
ilk olarak nodejs http server ve bir port üzerinden socket ayarlarımızı yapalım. Kök dizinimize appsp.js adında bir dosya oluşturalım ve içine kodlarımızı yazalım.
// const http = require('http');//http sunucusu const server = http.createServer((req, res) => { res.end('Server Kuruldu!'); }); server.listen(5000);//5000 portuna http server oluşturuyorup dinliyoruz
Nodejs Http Server ayarlarını yaptıktan sonra socket ayarlarını yapalım
const socketio = require('socket.io');//socket oluşturma const io = socketio.listen(server);//server socket ile bağlantı oluşturacağımız yeri portu belirtiyoruz.
Belirlediğimiz 5000 portu üzerinden socket dinleme yapacağımızı belirttik. Sıra geldi socket üzerinde bağlantı kuranları yakalamaya ve gelen verileri dinlerek işlem yapmaya.
//connection ile kullanıcının(client) girdiğini yakalıyoruz. io.sockets.on('connection', (socket) => { console.log('sockete birileri bağlandı.'); //data send-message eventına veri geldiğinde messages eventına datayı emit ile göndersin socket.on('send-message', function(data){ console.log("Server Dinliyor: "); console.log(data); //emit ile client gelen datayı gonderiyoruz io.emit('messages', data); }); //Ayrılan kullanıcının socket bağlantısı sonlandığında burası çalışır socket.on('disconnect', function(){ console.log('birileri geldi ve gitti.'); }); });
Socket.io Clien(Kullanıcı) tarafının ayarlarını yapalım
Socket.io http server kurulumunu ve 5000 portu üzerinden dinleme işlemlerini yukarıda yaptık. Şimdi kullanıcı(Client) tarafı ile veri 5000 portu üzerinden socket.io veri gönderip nodejs http serverdan gelen verileri ekrana yazdıralım.
client.html dosyası oluşturup içine kodlarımızı yazalım:
-- localdeki socket.io.js dosyamız -- Sunucuda ki socket.io.js dosyamız -- Cdn üzerinde ki socket.io.js dosyamız
Socket.io js dosyamızı client.html dosyamıza çektikten sonra Socket.on ile gelen verileri dinleyelim. Socket.emit ile gönderelim.
Dinleme(on), gönderme(emit) işlemlerini event(bir ad) belirterek yapıyoruz. Yani mantık şu http server üzerinde 5000 portu üzerinden eventlar ile haberleşeceğiz. Kodlarımızı yazarak deneyelim:
//Local bilgisayarımızdan var socket = io('http://localhost:5000/'); //Sunucu ip üzerinden var socket = io.connect("http://104.248.196.221:5000"); //Sunucu ssl ip üzerinden ise secure eklemeyi unutmayın var socket = io('https://104.248.196.221:5000', { secure: true });
Socket.on ve Socket.emit kullanımları
//Socket on ile (messages) eventını dinleyeceğiz socket.on('messages', function(data){ console.log("client dinleniyor"); console.log(data); //alert(data.name); $('.snc').html('Ad: '+ data.name+" Soyadı: "+data.surname) }); //emit ile (send-message) veri gonderiyoruz socket.emit('send-message', {"name":"ismail","surname":"gültekin"});
client.html dosyamızda snc clası ile ekrana sonuclarımızı yazdıralım:
Dinlenen Sonuçlar:
Nodejs http server 5000 portu üzerinden socket.io ile bağlantı kurarak belirlediğimiz eventlara client tarafında on ve emit metotlarını kullanarak veri göndermeyi ve almayı başardık.
Nodejs Projemizin sunucuda sürekli çalışması nasıl yapılır?
Projemizin sunucuda portserver ve içinde dosyalarımız ile server.js dosyamızın sürekli çalışması hatta ana makinanın tekrar başladığında bile devreye girmesi için pm2 npm paketini kullanacağız.
//pm2 npm paketini global olarak yükleyelim npm install pm2 -g //Start verip çalıştıralım pm2 start app.js //Restart çekme komutu pm2 restart app //Durdurma komutu pm2 stop app //Logları takip edebilme komutumuz pm2 logs //Ana makina kapanıp tekrar başlasa bile kaldığı yerden çalıştırma komutlarımız: startup ve save komutları pm2 startup //ana makina yeniden çalışsa bile pm2 save
Php ile socket.io kullanımını yapalım
Bunun için elephant.io adında bir paket kullanacağız. Paketi projemize Composer ile kurmak için;
composer require wisembly/elephant.io
Daha sonra php'den socket’e bir veri göndereceğimiz de şu şekilde kullanıyoruz; index.php adında bir dosya oluşturalım ve kodlarımızı yazalım.
require __DIR__ . '/vendor/autoload.php'; use ElephantIO\Client; use ElephantIO\Engine\SocketIO\Version2X; $client = new Client(new Version2X('http://IP_ADRES:5000')); $client->initialize(); $client->emit('dinlenenevent', [ 'title' => 'başlık', 'content' => 'içerik', 'date' => date('Y-m-d'), 'id' => 2 ]); $client->close();
İşlemler bu kadar sizde client.html dosyanızı tarayıcıda açtığınızda verilerin geldiğini gorebiliyorsanız sorun yok demektir. Umarım faydalı bir anlatım olmuştur.

Telif Hakkı:
Problemi Şikayet Et!HAKKIMDA
Yazılım Uzmanlığı konusunda 11 yılı aşkın süredir Türkiye'de Cumhurbaşkanlığı olmak üzere Kurumlara ve Tüzel kişilere; Yön verme, Yücelik Sağlama ve Büyüme gereksinimlerinden doğan Yazılım ihtiyaclarına çözümler sunmaktayım.
<html>
<body>
<h5>
Yazılım
&
Teknoloji
</h5>
<p>
Dünyasına
Hoş Geldiniz.
</p>
</body>
</html>
Son Eklenen Konular
Nginx Nedir, Nasıl Çalışır, Kurulumu, Hata ve Çözümü
03 Haziran, 2022
Web Site | Web Tasarım | Web Yazılım
27 Nisan, 2022
Html URL ASCII Karakter kodları
04 Mart, 2022
Jquery Alert, Sweet alert, Dialog Kullanımı
03 Mart, 2022
Doğal Seo Çalışması Nasıl Yapılır?
19 Şubat, 2022
En Çok Okunanlar
Google api key nasıl alınır?
26 Eylül, 2013
Youtube Video'sunu Gif Yapma Gif'e Çevirme
17 Ağustos, 2013
linux çeşitleri nelerdir?
13 Ağustos, 2013
Php ile bot nasıl yapılır?
22 Eylül, 2013
Ajax ile sayfa yenilenmeden resim yükleme nasıl yapılır?
04 Ekim, 2013
İlgili İçerikler
-
14 Temmuz, 2021 1061
Php Composer windows ve MacOSS Kurulumu ile paketlerin kullanımı
-
03 Haziran, 2021 805
Mac Os xamp php resim upload 777 hata çözümü
-
13 Mayıs, 2021 2576
Bot Yazmak İçin Gerekli Php Kodları Nelerdir?
-
12 Mayıs, 2021 4026
Bot Yazarak Diğer Sitelerden Veri Çekme Nasıl Yapılır?
-
11 Mayıs, 2021 4576
Firebase Push Notification Web Sitemizden Mobil Cihazlara Nasıl Bildirim Gönderilir? Php Api FCM Send Notification Bildirim Göndermeyi Uygulamalı Olarak Göstereceğim
-
06 Mayıs, 2021 7275
İyzico kredi kartı ödeme alma Php Api entegrasyonu ve siteleriniz de sanal pos işlemlerinin kullanımı.
Cemal Bayar
23:37:37 03.12.2021