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