PHP'de Socket.io Kullanımı

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;

  1. Centos Sunucuya Nodejs Kurulumu Yapmak
  2. Socket.io Kurulumu Yapmak
  3. Socket.io Ayarları Yapmak
  4. Client (istemci) Tarafında Socket’i Dinlemek
  5. 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

Yorum Yap