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:

  1. Erişim yapılamıyorsa, lütfen istemci bağlantı hatası nedenleri bölümünü kontrol edin.

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

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

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

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

  2. Sunucu çıplak tcp protokolüdür, websocket, http gibi diğer protokollerle doğrudan iletişim kurulamaz.