workerman 与php-fpm冲突吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了workerman 与php-fpm冲突吗相关的知识,希望对你有一定的参考价值。

不冲突,相当于你手机上网,workman是wifi,fpm是4g网络而已。4g网络是依托在电信运营商的sim卡上,相当于sim卡是4g信号的载体,(不完全正确,只是他俩绑定php-fpm实现通信功能)一般容器(nginx apahce)通过fpm进程来实现php的处理。 参考技术A workerman自身便是一个服务器容器具有PHP进程管理以及网络通讯功能, 完全不依赖于apache、nginx、php-fpm等这些容器便可以独立运行,所以性能更高。

thinkphp3.2整合workerman 多入口模式(windows)

第一步:将Workerman复制到ThinkPHP项目中的适当位置(我是放到根目录,与ThinkPHP平级)

第二步:将Workerman中的所有文件(除/Workerman/Lib/Constants.php外)后缀改为.class.php,如:Worker.php改为Worker.class.php

第三步:配置ThinkPHP的命名空间自动加载。在ThinkPHP的配置文件中加入

‘AUTOLOAD_NAMESPACE‘ => array(
    ‘Workerman‘ => ROOT_PATH . ‘Workerman‘,//根据自己的存放位置修改
)

第四步:在ThinkPHP项目中新增Worker模块和Worker控制器,也可以根据自己的喜好来命名

namespace Worker\Controller;
use Workerman\Worker;

class Worker {
    public function Start() {
        $worker = new Worker(‘text://0.0.0.0:1234‘); //实例化Worker,并设置协议、IP和端口
        $worker->count = 4;
        $worker->onMessage = array($this, ‘onMessage‘);
        //worker的其它回调方法可以参考onMessage
        Worker::runAll();
    }

    public function onMessage($connection, $data) {
        $connection->send(‘something...‘);
    }
}

在onMessage方法中,还可以根据自定义的协议和内容格式,通过ThinkPHP的A()方法来调用相关的模块、控制器,就可以做到跟普通的ThinkPHP项目相同的开发模式了,如:

 

$class = A($data[‘m‘] . ‘/‘ . $data[‘c‘]);
if (!$class) {
    $connection->send(‘Module or Controller not found.‘);
} else {
    $action = $data[‘a‘];
    unset($data[‘m‘], $data[‘c‘], $data[‘a‘]);
    try {
        call_user_func_array(array($class, $action), $data);
    } catch (Exception $ex) {
        throw $ex;
    }
}

第五步:ThinkPHP入口绑定。入口绑定是ThinkPHP3.2.1+给出的方法,之前的版本也有相应的方法,网上是可以查得到的。

新建入口文件worker.php

 

define(‘APP_PATH‘,‘./Application/‘);
define(‘BIND_MODULE‘, ‘Worker‘); define(‘BIND_CONTROLLER‘, ‘Worker‘); define(‘BIND_ACTION‘, ‘Start‘) //ThinkPHP的其他设定 require ‘./ThinkPHP/ThinkPHP.php‘;

最后:通过bat文件运行worker.php文件(Windows环境直接运行会报错)


以上是关于workerman 与php-fpm冲突吗的主要内容,如果未能解决你的问题,请参考以下文章

请教一个thinkphp5与workerman的问题

thinkphp结合workerman和gateway实现数据同步

WorkerMan源码分析(resetStd方法,PHP中STDIN, STDOUT, STDERR的重定向)

workerman 怎么启动定时器

workerman不支持tp框架3.x版本吗

nginx与php-fpm的简单的关系流程图