webman如何集成channel、GlobalData组件

tingfeng

两次尝试,如下。
尝试一,在config/bootstrap.php配置文件添加一个Bootstrap,然后在start方法里面直接new channel、GlobalData服务。
代码如下:

use Webman\Bootstrap as WebmanBootstrap;

class Bootstrap implements WebmanBootstrap
{

    public static function start($worker)
    {
        $channel = new \Channel\Server();
        $global = new \GlobalData\Server();
    }
}

结果:

  1. channelServer、GlobalDataServer不能连接
  2. 端口没有占用
  3. 并且在bootstrap创建,每个进程都会实列化一遍。
  4. 多次实列化可以理解,为什么没有占用端口没明白。

尝试二,配置process.php:

'websocket'  => [
    'handler'  => process\GlobalChannelServer::class,
    'count'  => 1,
],

在GlobalChannelServer的onWorkerStart方法中new channel、GlobalData服务。
代码如下:

<?php
namespace process;

use Channel\Server;

class GlobalChannelServer
{
    public function onWorkerStart()
    {
        $channel = new Server();
        $global = new \GlobalData\Server();
    }
}

结果:

  1. channelServer、GlobalDataServer不能连接
  2. 端口没有占用

尝试了以上两种方法,问题都是服务不能起来。在根目录创建server文件却可以跑起来。
代码如下:

<?php
require_once __DIR__ . '/vendor/autoload.php';

use Channel\Server as ChannelServer;
use GlobalData\Server as GlobalDataServer;

$channelServer = new ChannelServer();
$globalDataServer = new GlobalDataServer();

\Workerman\Worker::runAll();

虽然最后解决了问题,但是不理解为什么前面两种不能成功创建服务。在新文件中也是Worker::runAll,启动,在webman中最后也是Worker::runAll启动,为什么不行呢?如果想集成到webman中,有什么办法吗?

阅读 289
1个回答

xiuwang

$channelServer = new ChannelServer();
$globalDataServer = new GlobalDataServer
放到原来的start.php里就好了。