Yii 作为模块被调用

本文探讨了如何在PHP项目中,尤其是当Workman与Yii2在同一主机上运行时,避免通过REST接口带来的内部网络IO压力。通过分析Yii2的入口文件和Request、Response类,提出将Yii2作为一个模块直接调用,从而减少资源消耗。主要解决了三个问题:参数传入、返回结果获取和异常处理。文章还提到了在重写Response的send方法和设置相关属性时遇到的问题。
摘要由CSDN通过智能技术生成

Yii以及其他PHP框架,通常是通过一个入口文件把框架类库,引入进来。
然后根据route找到指定的控制器执行业务逻辑。一般的框架都可以很容易的集成第三方类库。
可是,如果说,多个项目之间需要相互调用,而且多个项目之间不是用相同的框架写的,但是是同一个语言。
如果不是相同语言,就只好是各个框架之间开放不同的接口,通过rest或者soap的形式进行接口调用。
虽然把各个模块封装成接口,可以很大的降低项目之间的耦合。但是接口同时也包含代码调用的形式。
项目中用到了workman作为消息发送,业务逻辑采用yii处理。那么问题来了,workman如何调用yii

问题

workman是用php命令方式执行的,yii2是跑在apache上面。如果采用rest调用方式,
消息经workman转发到yii2上进行处理,然后在返回到workman中。这个过程就会参数一个内部的网络io,
同时每个请求都需要一个apache进程,以及workman的进程才能进行处理。对主机有一定的压力。
采用node,每秒创建一个socket连接,创建3000个,每次连接上之后,workman根据连接创建一个uuid,
并返回到workman的客户端。如果采用rest的方式请求yii,请求在处理一部分的时候,服务器就挂掉了(本地采用xampp默认配置)。
如果数据不到400个。而如果直接通过workman直接进行数据库操作,数据都可以入库。

解决

workman与yii本来就在一台主机上,如果两个项目能够融合,直接在代码层进行调用,那数据的丢失率就可以下降。
所以要做的是将yii2z作为一个模块被其他项目调用。观察yii2的入口文件:


defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');
defined('YII_ENV_TEST') or define('YII_ENV_TEST', true);
require __DIR__ . '/vendor/autoload.php';
require __DIR__ . '/vendor/yiisoft/yii2/Yii.php';
require __DIR__ . '/common/config/bootstrap.php';

$config = yii\helpers\ArrayHelper::merge(
    require (__DIR__ . '/common/config/main.php'),
    require (__DIR__ . '/common/config/main-local.php'),
    require (__DIR__ 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值