PHP ve Socket.io Kullanımı

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;

  1. Centos sunucuya nodejs kurmak.
  2. Socket.io kurmak.
  3. Socket.io ayarları.
  4. Client tarafında socket’i dinlemek.
  5. 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.

“PHP ve Socket.io Kullanımı” için 4 yorum

  1. 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.

  2. 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 😀

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir