PHP'de Socket.io Kullanımı
PHP'de Socket.io Kullanımı
PHP tabanlı projelerde, bazı alanlarda gerçek zamanlı gösterme ihtiyacı olmaktadır. Bu gibi durumlarda, PHP’yi socket.io ile birlikte kullanarak, bu ihtiyacınızı giderebilirsiniz.
Bu konuda yapılması gereken çalışmalar;
- Centos Sunucuya Nodejs Kurulumu Yapmak
- Socket.io Kurulumu Yapmak
- Socket.io Ayarları Yapmak
- Client (istemci) Tarafında Socket’i Dinlemek
- PHP’den Socket’e Veri Göndermek
1- Centos Sunucuya Nodejs Kurulumu Yapmak
Bu işlemleri yapmak 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 Kurulumu Yapmak
socket.io’yu, nodejs’in paket yöneticisi olan npm ile kurmanız gerekmektedir. Ancak önce bir package.json
dosyası oluşturmak için aşağıdaki komutu çalıştırmanız gerekiyor.
npm init -y
İşleminiz bittikten sonra artık socket.io’yu kurabilirsiniz.
npm install --save socket.io
3- Socket.io Ayarları Yapmak
Şimdi socket.io için yapacağınız ayarlarda app.js
adında bir dosya oluşturun ardından içine aşağıdaki kodları yazın.
// 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(3000);
Burada on
ile socketi dinliyoruz, emit
ile client’a (istemci)'ye gönderiyoruz. Daha sonra nodejs ile server’ı ayağa kaldırıyoruz. Ancak bunu node’un pm2
paketi ile yapmanız gerekiyor. Böylece sürekli tekrardan başlatmak zorunda kalmazsınız. Sistem arkaplanda açık kalmaya devam etsin. İlk olarak pm2 paketini kurun.
npm install pm2 -g
Ve artık server’ı ayağa kaldırabilirsiniz.
pm2 start app.js
İşleminiz tamamlandıktan sonra, artık http://MY_IP_ADDRESSE:3000
olarak socket’i dinlemeye başlayabilirsiniz. İlgili adrese girdiğinizde ekrana bir şey çıkmıyorsa gayet normaldir, nedeni sadece socket bağlantısını yapmak gerekiyor. Ancak her şeyin doğru çalıştığından emin olmak için http://MY_IP_ADDRESSE:3000/socket.io/socket.io.js
dosyasını kontrol edebilirsiniz.
4- Client (istemci) Tarafında Socket’i Dinlemek
Öncelikle socket.io’nun js kütüphanesini sayfaya dahil ediyoruz.
Daha sonra socket adresimize bağlanıyoruz.
var socket = io('http://MY_IP_ADDRESSE
:3000');
socket.on('posts', function (data) {
console.log(data);
});
socket.emit('posts', {
'id': 5,
'title': 'Test',
'content': 'bu bir tesstir',
'date': '2020-04-21 14:05:40'
});
Eğer SSL kullanıyorsanız, o zaman şu şekilde güvenli socket bağlantısı açabilirsiniz.
var socket = io('https://MY_IP_ADDRESSE
:3000', {
secure: true
})
5- PHP’den Socket’e Veri 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;
__DIR__ . '/vendor/autoload.php';
use ElephantIO\Client;
use ElephantIO\Engine\SocketIO\Version2X;
$client = new Client(new Version2X('http://MY_IP_ADDRESSE
:3000'));
$client->initialize();
$client->emit('new-post', [
'title' => 'başlık',
'content' => 'içerik',
'date' => date('Y-m-d'),
'id' => 2
]);
$client->close();
Kaynak: Prototurk