(Workerman 버전>=3.3.0이 필요함)

void \Channel\Client::on(string $event_name, callback $callback_function)

$event_name 이벤트를 구독하고 발생 시 $callback_function 콜백을 등록합니다.

콜백 함수 매개변수

$event_name

구독된 이벤트의 이름으로, 임의의 문자열일 수 있습니다.

$callback_function

이벤트가 발생할 때 트리거되는 콜백 함수입니다. 함수 원형은 callback_function(mixed $event_data)입니다. $event_data는 이벤트가 발생할 때 전달된 이벤트 데이터입니다.

참고:

동일한 이벤트에 두 개의 콜백 함수가 등록된 경우, 후속 콜백 함수가 이전 콜백 함수를 덮어씁니다.

예제

멀티 프로세스 Worker (멀티 서버), 하나의 클라이언트가 메시지를 보내면 모든 클라이언트에게 브로드캐스트합니다.

start.php

<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';

// 채널 서버 초기화
$channel_server = new Channel\Server('0.0.0.0', 2206);

// 웹소켓 서버
$worker = new Worker('websocket://0.0.0.0:4236');
$worker->name = 'websocket';
$worker->count = 6;
// 각 worker 프로세스 시작 시
$worker->onWorkerStart = function($worker)
{
    // 채널 클라이언트가 채널 서버에 연결
    Channel\Client::connect('127.0.0.1', 2206);
    // broadcast 이벤트를 구독하고 이벤트 콜백 등록
    Channel\Client::on('broadcast', function($event_data)use($worker){
        // 현재 worker 프로세스의 모든 클라이언트에게 메시지를 브로드캐스트합니다.
        foreach($worker->connections as $connection)
        {
            $connection->send($event_data);
        }
    });
};

$worker->onMessage = function(TcpConnection $connection, $data)
{
   // 클라이언트가 보낸 데이터를 이벤트 데이터로 취급
   $event_data = $data;
   // 모든 worker 프로세스에게 broadcast 이벤트를 발행합니다.
   \Channel\Client::publish('broadcast', $event_data);
};

Worker::runAll();

테스트

Chrome 브라우저를 열고, F12를 눌러 개발자 도구를 열고, Console 탭에 다음을 입력하세요 (또는 아래 코드를 html 페이지에 넣고 JavaScript로 실행하세요)

메시지를 수신하는 연결

// 127.0.0.1을 실제 Workerman이 있는 IP로 바꿔주세요.
ws = new WebSocket("ws://127.0.0.1:4236");
ws.onmessage = function(e) {
    alert("서버로부터의 메시지를 받았습니다: " + e.data);
};

메시지를 브로드캐스트합니다.

ws.send('안녕하세요');