üzeri
(Gereken Workerman sürümü >= 3.3.0)
void \Channel\Client::on(string $event_name, callback $callback_function)
$event_name olayını abone olur ve olay meydana geldiğinde çağrılan $callback_function geri çağırma işlevini kaydeder.
Geri Çağırma İşlevinin Parametreleri
$event_name
Abone olunan olay adı, herhangi bir dize olabilir.
$callback_function
Olay meydana geldiğinde tetiklenen geri çağırma işlevi. İşlev prototipi callback_function(mixed $event_data) şeklindedir. $event_data olay yayımlandığında (publish) iletilen olay verisidir.
Dikkat:
Aynı olay için iki geri çağırma işlevi kaydedildiğinde, ikinci geri çağırma işlevi birincisini geçersiz kılacaktır.
Örnek
Çoklu işlem Worker (çoklu sunucu), bir istemci mesaj gönderir, tüm istemcilere yayın yapar.
start.php
<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
// Bir Channel sunucusu başlat
$channel_server = new Channel\Server('0.0.0.0', 2206);
// websocket sunucusu
$worker = new Worker('websocket://0.0.0.0:4236');
$worker->name = 'websocket';
$worker->count = 6;
// Her worker işlemi başlatıldığında
$worker->onWorkerStart = function($worker)
{
// Channel istemcisi Channel sunucusuna bağlanır
Channel\Client::connect('127.0.0.1', 2206);
// broadcast olayına abone olun ve olay geri çağrısını kaydedin
Channel\Client::on('broadcast', function($event_data)use($worker){
// Mevcut worker işleminin tüm istemcilerine mesaj yayınla
foreach($worker->connections as $connection)
{
$connection->send($event_data);
}
});
};
$worker->onMessage = function(TcpConnection $connection, $data)
{
// İstemciden gelen veriyi olay verisi olarak al
$event_data = $data;
// Tüm worker işlemlerine broadcast olayını yayınla
\Channel\Client::publish('broadcast', $event_data);
};
Worker::runAll();
Test
Chrome tarayıcısını açın, F12 tuşuna basarak geliştirici konsolunu açın, Console bölümüne aşağıdakileri yazın (veya aşağıdaki kodu bir html sayfasına yerleştirip js ile çalıştırın)
Mesajı alan bağlantı
// 127.0.0.1'i gerçek workerman'ın bulunduğu ip ile değiştirin
ws = new WebSocket("ws://127.0.0.1:4236");
ws.onmessage = function(e) {
alert("Sunucudan gelen mesaj: " + e.data);
};
Mesaj yayınlama
ws.send('hello world');