国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

進程間通訊組件channel

v2.1.0 版本
2025-02-07 版本更新時間
1405 安裝
2 star

簡介

webman/channel 是一個進程間通訊組件,用于進程間通訊及服務器之間通訊。接口采用訂閱模式。訂閱者訂閱某些事件,發(fā)布者發(fā)布對應事件,實現(xiàn)進程間及服務器間通訊。

安裝

composer require webman/channel

使用

安裝后會自動啟動名為plugin.webman.channel.server的channel服務端,如果你是多服務器通訊,當前服務器不需要channel服務端時,更改 config/plugin/webman/channel/app.php 中的enablefalse將其關閉。

注意
不管是進程間通訊還是服務器間通訊,plugin.webman.channel.server只能啟動一個,所有需要通訊的channel客戶端(包括訂閱者和發(fā)布者)必須連接同一個channel server。

訂閱方式一:獨立啟動一個進程作為訂閱者

新建process/ChannelClient.php

<?php
namespace process;

use Workerman\Timer;
use Webman\Channel\Client;

class ChannelClient
{
    public function __construct()
    {
        Client::connect('127.0.0.1', 2206);
        // 要訂閱的事件名稱(名稱可以為任意的數(shù)字和字符串組合)
        $event_name = 'event_xxxx';
        // 訂閱某個自定義事件并注冊回調(diào),收到事件后會自動觸發(fā)此回調(diào)
        Client::on($event_name, function($event_data) {
            var_dump($event_data);
        });
        // 每秒發(fā)布一次事件
        Timer::add(1, function () {
            // 要發(fā)布的事件名稱
            $event_name = 'event_xxxx';
            // 事件數(shù)據(jù)(數(shù)據(jù)格式可以為數(shù)字、字符串、數(shù)組),會傳遞給客戶端回調(diào)函數(shù)作為參數(shù)
            $event_data = array('some data.', 'some data..');
            // 發(fā)布某個自定義事件,訂閱這個事件的客戶端會收到事件數(shù)據(jù),并觸發(fā)客戶端對應的事件回調(diào)
            Client::publish($event_name, $event_data);
        });
    }
}

修改 config/process.php

添加以下配置

return [
    // 這里省略了其它配置...

    'channe_client' => [
        'handler' => \process\ChannelClient::class
    ]
];

restart重啟終端將會打印訂閱到的數(shù)據(jù)

訂閱方式一:在每個webman進程中訂閱

創(chuàng)建 app/bootstrap/Channel.php

<?php

namespace app\bootstrap;

use Webman\Bootstrap;
use Webman\Channel\Client;
use Workerman\Timer;

class Channel implements Bootstrap
{
    public static function start($worker)
    {
        // 只給webman進程設置訂閱
        if (!$worker || $worker->name !== 'webman') return;
        Client::connect('127.0.0.1', 2206);
        // 要訂閱的事件名稱(名稱可以為任意的數(shù)字和字符串組合)
        $event_name = 'event_xxxx';
        // 訂閱某個自定義事件并注冊回調(diào),收到事件后會自動觸發(fā)此回調(diào)
        Client::on($event_name, function($event_data) {
            var_dump($event_data);
        });
    }
}

配置config/bootstrap.php

return [
    // 這里省略了其它配置...

    app\bootstrap\Channel::class,
];

restart 重啟后,進程名為webman的進程將會執(zhí)行訂閱事件。

發(fā)布事件

app/controller/Index.php

<?php
namespace app\controller;

use support\Request;
use Webman\Channel\Client;

class Index
{
    public function index(Request $request)
    {
        Client::connect('127.0.0.1', 2206);
        $event_name = 'event_xxxx';
        // 事件數(shù)據(jù)(數(shù)據(jù)格式可以為數(shù)字、字符串、數(shù)組),會傳遞給客戶端回調(diào)函數(shù)作為參數(shù)
        $event_data = array('some data from controller', 'some data..');
        // 發(fā)布某個自定義事件,訂閱這個事件的客戶端會收到事件數(shù)據(jù),并觸發(fā)客戶端對應的事件回調(diào)
        Client::publish($event_name, $event_data);
        return 'ok';
    }
}

提示
Webman\Channel\Client 可以作為發(fā)布者在php-fpm環(huán)境中使用(php-fpm環(huán)境不支持訂閱),也就是說你可以在傳統(tǒng)項目中(Laraval ThinkPHP等)使用Webman\Channel\Client給webman發(fā)布事件。

贊助商