PHP projelerinizde, bazı bölümleri gerçek zamanlı gösterme ihtiyacınız olabilir. Bu gibi durumlarda, PHP’yi socket.io ile birlikte kullanarak, bu ihtiyacınızı giderebilirsiniz.
Bu konu altında anlatacaklarım;
- Centos sunucuya nodejs kurmak.
- Socket.io kurmak.
- Socket.io ayarları.
- Client tarafında socket’i dinlemek.
- PHP’den socket’e data göndermek.
1- Centos sunucuya Node.js kurmak
Bunun için şu komutları çalıştırmanız yeterli;
yum install -y gcc-c++ make curl -sL https://rpm.nodesource.com/setup_10.x | sudo -E bash - yum install nodejs
Kurulumun doğru şekilde yapıldığını test etmek için nodejs’in ve npm’in sürümlerine bakabilirsiniz;
node -v
npm -v
2- Socket.io’yu kurmak
socket.io’yu, nodejs’in paket yöneticisi olan npm ile kuracağız. Ancak önce bir package.json
dosyası oluşturmak için şu komutu çalıştıralım.
npm init -y
Artık socket.io’yu kurabiliriz.
npm install --save socket.io
3- Socket.io Ayarları
Gelelim socket.io için yapacağımız ayarlara. app.js
adında bir dosya oluşturalım. Ve içine şu kodlarımızı yazalım.
// nodejs http server kuruyoruz
const server = require('http').createServer();
const io = require('socket.io')(server);
// sockete bağlanıldığında burası çalışır
io.on('connection', function(socket){
console.log('sockete birileri bağlandı.');
// new-post eventını dinliyoruz, backendden buraya data göndereceğiz
socket.on('new-post', function(data){
// bir data gelirse bunu client'a gönderiyoruz
io.emit('posts', data);
});
// socket bağlantısı sonlandığında burası çalışır
socket.on('disconnect', function(){
console.log('birileri geldi ve gitti.');
});
});
// 5000 portundan dinliyoruz
server.listen(5000);
Burada on
ile dinliyoruz, emit
ile client’a gönderiyoruz. Şimdi nodejs ile server’ı ayağa kaldıralım. Ancak bunu node’un pm2
paketi ile yapalım. Böylece yeniden yeniden başlatmak zorunda kalmayalım, arkaplanda açık kalmaya devam etsin. İlk olarak pm2 paketini kuralım.
npm install pm2 -g
Ve artık server’ı ayağa kaldırabiliriz.
pm2 start app.js
Evet, artık http://IP_ADRES:5000
olarak socket’i dinlemeye başlayabiliriz. Eğer adrese girdiğinizde bir şey çıkmıyorsa normaldir, çünkü sadece socket bağlantısı gerekiyor. Ancak her şeyin doğru çalıştığından emin olmak için http://IP_ADRES:5000/socket.io/socket.io.js
dosyasını kontrol edebilirsiniz.
4- Client’dan socket’i dinlemek
Bu kısım en kolayı, öncelikle socket.io’nun js kütüphanesini sayfaya dahil ediyoruz.
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.2.0/socket.io.js"></script>
Daha sonra socket adresimize bağlanıyoruz.
var socket = io('http://IP_ADRESI:5000'); // socket'te ki posts event'ını dinliyoruz, gelirse konsola yazdırıp bakacağız socket.on('posts', function (data) { console.log(data); }); // eğer client tarafından socket'in posts event'ına daha göndermek isteseydik yine emit'i kullanacaktık socket.emit('posts', { 'id': 5, 'title': 'Test', 'content': 'bu bir tesstir', 'date': '2019-08-11 12:00:00' });
Eğer SSL kullanıyorsanız, o zaman şu şekilde güvenli socket bağlantısı açabilirsiniz.
var socket = io('https://IP_ADRESI:5000', { secure: true })
5- PHP’den socket’e data göndermek
Bunun için elephant.io adında bir paket kullanacağız. Paketi projemize kurmak için;
composer require wisembly/elephant.io
Daha sonra socket’e bir veri göndereceğimiz de şu şekilde kullanıyoruz;
<?php 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('new-post', [ 'title' => 'başlık', 'content' => 'içerik', 'date' => date('Y-m-d'), 'id' => 2 ]); $client->close();
Olayımız tamamen bundan ibaret 🙂 Daha detaylı anlatımı videoda bulabilirsiniz.
Eline koluna diline sağlık. Gayet güzel anlatmışsın.
Mükemmel anlatım. Ancak güvenlik alanına da girsek çok iyi olur 🙂 Hocam Register / Login token olaylarını falanda anlattın mı tamamdır.
Arşivimizde bulunsun eline emeğine sağlık
dedim https://www.digitalocean.com/ dan yapıyım siz ordan yapmışsınız işte üye falan oldum benden ehliyet fotosunu istedi yolladım ehliyetin arkasını yolla dedi yolladım sonra selfie yolla dedi yolladım banladı bana sana hizmet veremeyin dedi 😀