初学workerman,有几个疑点,希望大家帮忙解答下

fengzi

问题描述

本人初学workerman,阅读文档后有几个疑点,请大家帮忙解答下。
1、什么是主进程(哪个步骤中产生的是主进程),什么是子进程(哪个步骤中产生的是子进程)
2、workerman中$worker = new Worker('http://0.0.0.0:8686');这个new出来的$worker算主进程还是子进程。
3、在thinkphp5中使用workerman是否只要在配置文件worker_server.php中配置worker_class参数,也就是配置服务启动文件,在前后端通信的时候就可以不用写$worker = new Worker('http://0.0.0.0:8686');来实例化出worker,会自动创建一个worker对象?
4、如果$worker = new Worker('http://0.0.0.0:8686');中的$worker是主进程,那我又该怎样多创建几个主进程,通过多次new?
5、假设我只开启了一个主线程,5个子线程,我想不同用户进入不同子进程,又该如何操作?
6、如何验证我开了多个主线程?

小白一枚,希望大家帮我解惑下。。。。

327 1 0
1个回答

walkor

workerman只有一个主进程,至少一个子进程。
不支持创建多个主进程。
Worker::runAll(); 时会自动创建主进程和子进程。
$worker = new Worker()的含义创建一个监听。
$worker->count = 2含义是这个监听开启两个子进程。

建议直接用webman开发,不用管主进程和子进程,开发体验和tp等框架一致。

  • fengzi 16天前

    你好,我在其他帖子中看到有人说是有多个主进程的,那他们说的主进程又是什么回事。

  • walkor 16天前

    没有多个主进程

  • fengzi 16天前

    好的,多谢。请问下你知道第五点怎么操作么?

  • walkor 16天前

    new5个worker,每个worker监听不同的端口,每个worker->count=1,用户想要连哪个进程就连哪个端口

  • fengzi 16天前

    1、你的意思是在【onWorkerStart 】回调方法中以【$worker = new Worker('http://0.0.0.0:8686');】的方式,创建5个不同端口worker
    2、客户端与服务器端建立连接时的端口跟这五个端口没关系的吧,这五个类似于五个子进程?

  • walkor 16天前

    不在onWorkerSrart new worker
    客户端连接时要连对应worker的端口

  • fengzi 16天前

    我有写个demo来尝试,以下是结合TP框架后的产生的配置文件,我看端口只能配置一个,并不能启动多个端口呀?是需要我把原本的启动类换成启动文件,在启动文件中多次new5个不同端口worker么?
    // 扩展自身需要的配置
    'protocol' => 'websocket', // 协议 支持 tcp udp unix http websocket text
    'host' => '0.0.0.0', // 监听地址
    'port' => 2345, // 监听端口
    'socket' => '', // 完整监听地址
    'context' => [], // socket 上下文选项
    'worker_class' => [\app\common\service\work\WorkService::class], // 自定义Workerman服务类名 支持数组定义多个服务

  • fengzi 16天前

    或者在【'worker_class' => [\app\common\service\work\WorkService::class]】这里配置多个端口的启动类?

  • walkor 16天前

    tp我不熟悉

  • fengzi 16天前

    好的,感谢你前面的回答

🔝