webman中的自定义进程中需要用到Channel\Server服务,如何一起启动

indesigncs

问题描述

想在webman中一起启动一个Channel\Server进程,现在单独文件(a.php)启动是这样:
use Workerman\Worker;
require_once __DIR__ . '/vendor/autoload.php';

// 不传参数默认是监听0.0.0.0:2206
$channel_server = new Channel\Server();
if(!defined('GLOBAL_START'))
{
Worker::runAll();
}
然后 php a.php start -d

如果想在 webman 中启动时一起启动,写在自定义进程的onWorkerStart 函数下面,会不会启动多了一个进程?
例如这样:
class myservice
{
/**

  • 每个进程启动
  • @param $worker
    */
    public function onWorkerStart(Worker $worker)
    {
    $channel_server = new Channel\Server();
    }
    }
    请问这样会创建了两个进程吗,该如何在webman启动时一并创建Channel\Server服务呢?
711 3 0
3个回答

胡桃

修改 start.php

#!/usr/bin/env php
<?php
require_once __DIR__ . '/vendor/autoload.php';

new \Channel\Server('0.0.0.0', 8080);

support\App::run();
meows

自定义进程就可以了,按照这个文档:https://www.workerman.net/doc/webman/process.html

  • indesigncs 2023-10-12

    自定义进程我懂,但
    public function onWorkerStart(Worker $worker)
    {
    $channel_server = new Channel\Server();
    }
    这样会有两个进程吧,1楼的朋友是理解了我的意思,只是可能 不能使用 命令行停止和重启

  • meows 2023-10-12

    不会在创建进程,按照你现在这个写法没得问题。
    不过你这个 $channel_server = new Channel\Server(); 不会被启动,
    你最好自己class MyChannelServer extends Channel\Server { public function listen() {$this->_worker->listen();}}

    自定义进程这样写:
    public function onWorkerStart(Worker $worker)
    {
    $channel_server = new 命名空间MyChannelServer();
    $channel_server->listen();
    }

  • indesigncs 2023-10-12

    感谢,我试试

年代过于久远,无法发表回答
×
🔝