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

進(jìn)程間通訊組件channel

v2.1.0 版本
2025-02-07 版本更新時(shí)間
1438 安裝
2 star

簡(jiǎn)介

webman/channel 是一個(gè)進(jìn)程間通訊組件,用于進(jìn)程間通訊及服務(wù)器之間通訊。接口采用訂閱模式。訂閱者訂閱某些事件,發(fā)布者發(fā)布對(duì)應(yīng)事件,實(shí)現(xiàn)進(jìn)程間及服務(wù)器間通訊。

安裝

composer require webman/channel

使用

安裝后會(huì)自動(dòng)啟動(dòng)名為plugin.webman.channel.server的channel服務(wù)端,如果你是多服務(wù)器通訊,當(dāng)前服務(wù)器不需要channel服務(wù)端時(shí),更改 config/plugin/webman/channel/app.php 中的enablefalse將其關(guān)閉。

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

訂閱方式一:獨(dú)立啟動(dòng)一個(gè)進(jìn)程作為訂閱者

新建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';
        // 訂閱某個(gè)自定義事件并注冊(cè)回調(diào),收到事件后會(huì)自動(dòng)觸發(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ù)組),會(huì)傳遞給客戶端回調(diào)函數(shù)作為參數(shù)
            $event_data = array('some data.', 'some data..');
            // 發(fā)布某個(gè)自定義事件,訂閱這個(gè)事件的客戶端會(huì)收到事件數(shù)據(jù),并觸發(fā)客戶端對(duì)應(yīng)的事件回調(diào)
            Client::publish($event_name, $event_data);
        });
    }
}

修改 config/process.php

添加以下配置

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

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

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

訂閱方式一:在每個(gè)webman進(jìn)程中訂閱

創(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進(jìn)程設(shè)置訂閱
        if (!$worker || $worker->name !== 'webman') return;
        Client::connect('127.0.0.1', 2206);
        // 要訂閱的事件名稱(名稱可以為任意的數(shù)字和字符串組合)
        $event_name = 'event_xxxx';
        // 訂閱某個(gè)自定義事件并注冊(cè)回調(diào),收到事件后會(huì)自動(dòng)觸發(fā)此回調(diào)
        Client::on($event_name, function($event_data) {
            var_dump($event_data);
        });
    }
}

配置config/bootstrap.php

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

    app\bootstrap\Channel::class,
];

restart 重啟后,進(jìn)程名為webman的進(jìn)程將會(huì)執(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ù)組),會(huì)傳遞給客戶端回調(diào)函數(shù)作為參數(shù)
        $event_data = array('some data from controller', 'some data..');
        // 發(fā)布某個(gè)自定義事件,訂閱這個(gè)事件的客戶端會(huì)收到事件數(shù)據(jù),并觸發(fā)客戶端對(duì)應(yīng)的事件回調(diào)
        Client::publish($event_name, $event_data);
        return 'ok';
    }
}

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

贊助商