我有一個類order,這個類由于data變量占用內(nèi)存比較大,所以我做成全局類,如果通過workerman實現(xiàn),則如代碼【2】所示,先創(chuàng)建一個全局類,然后在onWorkerStart中更新一次data數(shù)據(jù)(執(zhí)行upBaseData方法),然后定時每30秒更新一次data數(shù)據(jù)(執(zhí)行upBaseData方法),這樣我就可以在onMessage中通過global $golbal_order;方式引入,在任意地方使用這個全局類
現(xiàn)在使用了webman,之前也問過一些關(guān)于webman的問題(http://www.wtbis.cn/q/13885)
問題:要是我用webman來實現(xiàn)以上要求,請問如何寫呢?
<?php
use app\service;
class order{
protected $data;
public function __construct(){
}
public function upBaseData(){
//*這里會更新下單所用到的基礎(chǔ)數(shù)據(jù),這個數(shù)據(jù)是通過請求外部連接來獲取到,數(shù)據(jù)比較大 */
//*代碼省略 */
//請求到后最終儲存在這個變量上$this->data
return true;
}
public function add(){
//這里進行下單操作
}
public function edit(){
//這里進行編輯訂單操作
}
public function pay(){
//這里進行支付操作
}
}
【2】workerman:
use Workerman\Worker;
use Workerman\Timer;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
use app\service\order;
require_once __DIR__ . '/vendor/autoload.php';
$http_worker = new Worker("http://0.0.0.0:2345");
$http_worker->count = 4;
$golbal_order = new order();//這里創(chuàng)建一個全局order類
$http_worker->onWorkerStart = function(Worker $task){
global $golbal_order;
$golbal_order->upBaseData();
//定時刷新數(shù)據(jù)
Timer::add(30, function()
{
$golbal_order->upBaseData();
});
}
$http_worker->onMessage = function(TcpConnection $connection, Request $request)
{
global $golbal_order;
$golbal_order->add();
//忽略剩余業(yè)務(wù)代碼
$connection->send('ok');
};
Worker::runAll();
?>
全局類是什么東西?我只知道static和global定義的數(shù)組,就是常駐內(nèi)存的,可以無限增加。
無論用什么方法都能去修改數(shù)組,不需要你說的這個什么類??梢栽陧椖康娜魏蔚刂分苯有薷臄?shù)組
如果確實數(shù)據(jù)量比較大,考慮是否經(jīng)常讀寫。使用文件緩存或者redis緩存來處理。有精力可以將其中數(shù)據(jù)根據(jù)一定條件:如常用程度,數(shù)據(jù)關(guān)聯(lián)度等進行分組為多個緩存key,這樣就不會占用程序本身的內(nèi)存