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

定時(shí)任務(wù)的進(jìn)程問(wèn)題

killhook

centos
workerman 3.0 版
照著手冊(cè)的定時(shí)任務(wù)例子做了,沒(méi)有任何輸出。

use \Workerman\Worker;

$task = new Worker();
// 開(kāi)啟多少個(gè)進(jìn)程運(yùn)行定時(shí)任務(wù),注意多進(jìn)程并發(fā)問(wèn)題
$task->count = 1;
$task->onWorkerStart = function($task)
{
    $time_interval = 2;
    \Workerman\Lib\Timer::add($time_interval, function()
    {
        echo "task run\n";
    });
};

這樣做倒是有輸出。

\Workerman\Lib\Timer::add(1,function(){echo "task run\n";});

所以我想,是不是進(jìn)程的問(wèn)題

$task = new Worker();

那么這個(gè)是需要擴(kuò)展支持還是?

7455 17 1
17個(gè)回答

killhook

我看了php -m
pcntl這個(gè)是有的

  • 暫無(wú)評(píng)論
walkor 打賞

代碼按照手冊(cè)規(guī)范要放在Applications/項(xiàng)目/start.php中,不知道killhook放在哪里運(yùn)行的。

例如新建文件Applications/Test/start.php

use \Workerman\Worker;

$task = new Worker();
// 開(kāi)啟多少個(gè)進(jìn)程運(yùn)行定時(shí)任務(wù),注意多進(jìn)程并發(fā)問(wèn)題
$task->count = 1;
$task->onWorkerStart = function($task)
{
    $time_interval = 2;
    \Workerman\Lib\Timer::add($time_interval, function()
    {
        echo "task run\n";
    });
};

這樣表示要建立了一個(gè)Worker進(jìn)程,Worker進(jìn)程在啟動(dòng)的時(shí)候建立了一個(gè)定時(shí)任務(wù),2秒運(yùn)行一次,輸出 “task run\n”

在workerman根目錄運(yùn)行 php start.php start 運(yùn)行查看結(jié)果

  • 暫無(wú)評(píng)論
killhook

首先很感謝你的耐心回答
問(wèn)題確實(shí)如你所說(shuō),若要建立一個(gè)進(jìn)程的話,這份代碼必須放在項(xiàng)目的start.php文件中。
我的是放在自己建立的文件里了,所以不能新建進(jìn)程,只能添加一個(gè)定時(shí)任務(wù)于當(dāng)前進(jìn)程。

另外還有一個(gè)問(wèn)題想請(qǐng)教,我希望在start.php文件里添加一個(gè)定時(shí)任務(wù),定時(shí)執(zhí)行我自己建立的一個(gè)文件里的類(lèi)里的函數(shù)。

但引入路徑無(wú)論怎么寫(xiě),都說(shuō)致命錯(cuò)誤,找不到類(lèi)。
該文件路徑為 Applications/項(xiàng)目/MyFunction/TictakEvent.php

TictakEvent.php的代碼為

namespace MyFunction;
use \GatewayWorker\Lib\Gateway;
use \GatewayWorker\Lib\Store;

class TictakEvent
{

    public static function renwu_send($name){
        echo $name;
    }

}

按以下方式并不能引入。
use MyFunction\TictakEvent;
$task = new Worker();

$task->count = 1;
$task->onWorkerStart = function($task)
 {
     $time_interval = 3;
     \Workerman\Lib\Timer::add($time_interval, function()
     {
        \MyFunction\TictakEvent::renwu_send(‘test’);
     });
 };
  • 暫無(wú)評(píng)論
killhook

use \Workerman\Worker; 這個(gè)已經(jīng)引入了,我怕我描述的不夠詳細(xì)。
詳細(xì)錯(cuò)誤是說(shuō)找不到這個(gè)類(lèi) \MyFunction\TictakEvent

  • 暫無(wú)評(píng)論
walkor 打賞

可以更新下workerman
之前Worker沒(méi)有實(shí)現(xiàn)業(yè)務(wù)類(lèi)的自動(dòng)加載,Gateway/Worker是有自動(dòng)加載的
現(xiàn)在都加上了自動(dòng)加載,可以試下

  • 暫無(wú)評(píng)論
killhook

可以了,非常感謝

  • 暫無(wú)評(píng)論
killhook

你好,之后又產(chǎn)生了新的問(wèn)題。
已經(jīng)可以在項(xiàng)目start文件里添加新進(jìn)程定時(shí)運(yùn)行我自己建立的文件了
在我自己的文件函數(shù)里,有用到
Gateway::sendToAll('{"message":"hehe","type":"test"}',$user_list);
但使用時(shí)報(bào)錯(cuò)

PHP Warning:  Invalid argument supplied for foreach() in /home/www/workerman/GatewayWorker/Lib/Gateway.php on line 54

$user_list 我var_dump出來(lái)是有值的。

array(2) {
  =>
  int(4)
  =>
  int(3)
}

但不知為何,傳入sendToAll后,我在Gateway文件里加入了var_dump的語(yǔ)句來(lái)檢查我傳入的數(shù)組,結(jié)果卻是
bool(false)

  • 暫無(wú)評(píng)論
killhook

我可以確認(rèn),我的數(shù)組里的用戶(hù)是在線的。

  • 暫無(wú)評(píng)論
walkor 打賞

我這測(cè)試沒(méi)有問(wèn)題,這里是start.php的全部代碼

<?php
use \Workerman\WebServer;
use \GatewayWorker\Gateway;
use \GatewayWorker\BusinessWorker;
use \Workerman\Lib\Timer;
use \Workerman\Worker;

// gateway
$gateway = new Gateway("Websocket://0.0.0.0:8585");

$gateway->name = 'TodpoleGateway';

$gateway->count = 4;

$gateway->lanIp = '127.0.0.1';

$gateway->startPort = 4000;

$gateway->pingInterval = 10;

$gateway->pingData = '{"type":"ping"}';

// bussinessWorker
$worker = new BusinessWorker();

$worker->name = 'TodpoleBusinessWorker';

$worker->count = 4;

// ##############讓一個(gè)小蝌蚪定時(shí)說(shuō)hello 開(kāi)始#########
$task = new Worker();
$task->onWorkerStart = function($task){
    Timer::add(5, function(){
        $client_list = \GatewayWorker\Lib\Gateway::getOnlineStatus();
        \GatewayWorker\Lib\Gateway::sendToAll(json_encode(array('type'=>'message', 'id'=>current($client_list), 'message' => 'hello')));
    });
};
// ##############讓一個(gè)小蝌蚪定時(shí)說(shuō)hello 完畢#########

// WebServer
$web = new WebServer("http://0.0.0.0:8686");

$web->count = 2;

$web->addRoot('www.your_domain.com', __DIR__.'/Web');

你可以自己var_dump定位下是哪里的問(wèn)題,問(wèn)題應(yīng)該很好找

  • 暫無(wú)評(píng)論
killhook

你的代碼我測(cè)試下來(lái)是沒(méi)有問(wèn)題的
我的代碼放到項(xiàng)目/Event.php里于當(dāng)前進(jìn)程執(zhí)行也是沒(méi)有問(wèn)題的
但是一旦放在我自己新建的文件里,問(wèn)題就出來(lái)了。
經(jīng)過(guò)跟蹤調(diào)試發(fā)現(xiàn),在\GatewayWorker\Lib\Gateway.php 文件的第42行起
如果是在項(xiàng)目的start.php文件里做的新建進(jìn)程或者是在項(xiàng)目的Event.php里做的添加至當(dāng)前進(jìn)程,
在執(zhí)行sendToAll時(shí),self::$businessWorker為真,執(zhí)行if里的語(yǔ)句
而如果是在項(xiàng)目start.php里新建進(jìn)程去定時(shí)調(diào)用我自己建立的文件里的函數(shù)。
這個(gè)函數(shù)在執(zhí)行sendToAll時(shí),self::$businessWorker為假,執(zhí)行的是else里的語(yǔ)句。
我想這就是問(wèn)題所在吧。。

// 如果有businessWorker實(shí)例,說(shuō)明運(yùn)行在workerman環(huán)境中,通過(guò)businessWorker中的長(zhǎng)連接發(fā)送數(shù)據(jù)
if(self::$businessWorker)
{
    foreach(self::$businessWorker->gatewayConnections as $gateway_connection)
    {
        $gateway_connection->send($gateway_data);
    }
}
// 運(yùn)行在其它環(huán)境中,使用udp向worker發(fā)送數(shù)據(jù)
else
{
    $all_addresses = Store::instance('gateway')->get('GLOBAL_GATEWAY_ADDRESS');
    foreach($all_addresses as $address)
    {
        self::sendToGateway($address, $gateway_data);
    }
}
  • 暫無(wú)評(píng)論
walkor 打賞

但是一旦放在我自己新建的文件里,問(wèn)題就出來(lái)了。

這種情況是因?yàn)橐粋€(gè)項(xiàng)目是基于Gateway/Worker的,另外一個(gè)項(xiàng)目是基于Worker的,Workerman/Applications下的多個(gè)項(xiàng)目是不相干的,Worker項(xiàng)目里面找不到Gateway/Worker的配置導(dǎo)致

解決辦法:
可以手動(dòng)require_once下Gateway/Worker項(xiàng)目下的Config/Store.php試下

  • 暫無(wú)評(píng)論
killhook

經(jīng)過(guò)嘗試在項(xiàng)目里包含配置文件,這沒(méi)有解決問(wèn)題。

  • 暫無(wú)評(píng)論
killhook

先把代碼放start.php里跑起來(lái)再說(shuō)吧。暫時(shí)不想折騰這個(gè)問(wèn)題了。。。。

  • 暫無(wú)評(píng)論
killhook

非常感謝你的耐心回答。

  • 暫無(wú)評(píng)論
killhook

walkor,我鄭重的向你道歉,我始終還是咽不下定時(shí)進(jìn)程這口氣,盯著你的源碼看了良久,又在腦海里把Gateway/Worker 的進(jìn)程模型翻來(lái)覆去的想。終于明白。都是我的錯(cuò),為了便于調(diào)試,我在我自己的業(yè)務(wù)處理類(lèi)里的客戶(hù)登陸那加入了以下代碼。
$store = Store::instance('room');
$store->flush();
這樣,你的Gateway.php又哪里能取到值。。。。。
$all_addresses = Store::instance('gateway')->get('GLOBAL_GATEWAY_ADDRESS');

非常抱歉。以及感謝你的耐心和專(zhuān)業(yè)。

  • 暫無(wú)評(píng)論
killhook

現(xiàn)在代碼已經(jīng)在愉快的正常工作了。

  • 暫無(wú)評(píng)論
walkor 打賞

好的

  • 暫無(wú)評(píng)論
年代過(guò)于久遠(yuǎn),無(wú)法發(fā)表回答
??