Basit Geliştirme Örneği
Kurulum
workerman'ı kur
Boş bir dizinde çalıştırın
composer require workerman/workerman
Örnek 1, HTTP protokolü kullanarak web hizmeti sağlama
start.php dosyasını oluşturun
<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
// 2345 portunu dinleyen bir Worker oluşturun, http protokolü ile iletişim sağlıyor
$http_worker = new Worker("http://0.0.0.0:2345");
// Dışarıya hizmet sağlamak için 4 süreç başlatın
$http_worker->count = 4;
// Tarayıcıdan gelen verileri aldığında tarayıcıya hello world yanıtı gönderir
$http_worker->onMessage = function(TcpConnection $connection, Request $request)
{
// Tarayıcıya hello world gönderir
$connection->send('hello world');
};
// worker'ı çalıştır
Worker::runAll();
Komut satırında çalıştırma (windows kullanıcıları için cmd komut satırı, aynı şekilde)
php start.php start
Test
Varsayalım ki sunucu ip'si 127.0.0.1
Tarayıcıda http://127.0.0.1:2345 adresine gidin
Dikkat:
-
Erişim yapılamıyorsa, lütfen istemci bağlantı hatası nedenleri bölümünü kontrol edin.
-
Sunucu http protokolüdür, sadece http protokolü ile iletişim sağlanabilir, websocket gibi diğer protokollerle doğrudan iletişim kurulamaz.
Örnek 2, WebSocket protokolü kullanarak hizmet sağlama
ws_test.php dosyasını oluşturun
<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
// Dikkat: burada önceki örnekten farklı olarak websocket protokolü kullanılıyor
$ws_worker = new Worker("websocket://0.0.0.0:2000");
// Dışarıya hizmet sağlamak için 4 süreç başlatın
$ws_worker->count = 4;
// İstemciden gelen veri alındığında hello $data olarak istemciye yanıt verin
$ws_worker->onMessage = function(TcpConnection $connection, $data)
{
// İstemciye hello $data gönderir
$connection->send('hello ' . $data);
};
// worker'ı çalıştır
Worker::runAll();
Komut satırında çalıştırma
php ws_test.php start
Test
Chrome tarayıcısını açın, F12 tuşuna basarak hata ayıklama konsolunu açın, Console bölümüne (veya aşağıdaki kodu bir html sayfasında js ile çalıştırarak) girin
// Varsayalım ki sunucu ip'si 127.0.0.1
ws = new WebSocket("ws://127.0.0.1:2000");
ws.onopen = function() {
alert("Bağlantı başarılı");
ws.send('tom');
alert("Sunucuya bir dize gönderildi: tom");
};
ws.onmessage = function(e) {
alert("Sunucudan gelen mesaj:" + e.data);
};
Dikkat:
-
Erişim yapılamıyorsa, lütfen kılavuzda sıkça karşılaşılan sorunlar - bağlantı hatası bölümünü kontrol edin.
-
Sunucu websocket protokolüdür, sadece websocket protokolü ile iletişim sağlanabilir, http gibi diğer protokollerle doğrudan iletişim kurulamaz.
Örnek 3, verileri doğrudan TCP üzerinden iletme
tcp_test.php dosyasını oluşturun
<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
// 2347 portunu dinleyen bir Worker oluşturun, herhangi bir uygulama katmanı protokolü kullanmıyor
$tcp_worker = new Worker("tcp://0.0.0.0:2347");
// Dışarıya hizmet sağlamak için 4 süreç başlatın
$tcp_worker->count = 4;
// İstemciden veri geldiğinde
$tcp_worker->onMessage = function(TcpConnection $connection, $data)
{
// İstemciye hello $data gönderir
$connection->send('hello ' . $data);
};
// worker'ı çalıştır
Worker::runAll();
Komut satırında çalıştırma
php tcp_test.php start
Test: Komut satırında çalıştırma
(Aşağıdaki komut satırı çıktısı linux ile windows arasındaki farklar nedeniyle farklılık gösterebilir)
telnet 127.0.0.1 2347
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
tom
hello tom
Dikkat:
-
Erişim yapılamıyorsa, lütfen kılavuzda sıkça karşılaşılan sorunlar - bağlantı hatası bölümünü kontrol edin.
-
Sunucu çıplak tcp protokolüdür, websocket, http gibi diğer protokollerle doğrudan iletişim kurulamaz.