国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

關于webman使用全局類的一些問題

dgkerry

問題描述

我有一個類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();
?>
458 4 0
4個回答

gddd

全局類是什么東西?我只知道static和global定義的數組,就是常駐內存的,可以無限增加。
無論用什么方法都能去修改數組,不需要你說的這個什么類。可以在項目的任何地址直接修改數組

  • 暫無評論
oliver.

可用容器+單例實現(xiàn)。至于定時更新數據的問題,可以寫個刷新單例 data 的接口,再定時請求接口刷數據

  • 暫無評論
shiroi

定個static就完事啦,哪有這么復雜

  • 暫無評論
超高級的稻姬

如果確實數據量比較大,考慮是否經常讀寫。使用文件緩存或者redis緩存來處理。有精力可以將其中數據根據一定條件:如常用程度,數據關聯(lián)度等進行分組為多個緩存key,這樣就不會占用程序本身的內存

  • 暫無評論
??