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

GateWay 獲取無(wú)法穩(wěn)定獲取靜態(tài)成員值

daling

在Event.php中新增了一個(gè)靜態(tài)成員,然后在onWorkerStart回調(diào)中,設(shè)置在$businessWorker->id == 0進(jìn)程中異步打開(kāi)一個(gè)TCP,并將接受的數(shù)據(jù)處理后循環(huán)賦值更新靜態(tài)成員,并在onMessage回調(diào)中隨時(shí)取該靜態(tài)成員值,卻發(fā)現(xiàn)無(wú)法穩(wěn)定獲取,時(shí)而獲取值為空,時(shí)而獲取值正常。
經(jīng)測(cè)試,如果在onWorkerStart回調(diào)中給該靜態(tài)成員循環(huán)加1,其值實(shí)可以一直正常步進(jìn)的,但是換成循環(huán)賦值數(shù)組變量,就不穩(wěn)定了,時(shí)有時(shí)無(wú)。大概是什么方面的問(wèn)題?,對(duì)變量?jī)?nèi)存大小有限制嗎?還是因?yàn)樽兞砍qv內(nèi)存,而循環(huán)更新值時(shí)造成內(nèi)存溢出?

class Events
{
    public static $tcp_data = array(); 
    public static $int_data = 1;

    public static function onWorkerStart($businessWorker) {
        if ($businessWorker->id == 0) {
            //創(chuàng)建異步TCP ,獲取TCP數(shù)據(jù)流
            $tcp_connection = new AsyncTcpConnection("tcp://110.110.110.110:110");
            $tcp_connection->onConnect = function($tcp_connection){
                $tcp_connection->send('get_data\n');
            };
            $tcp_connection->onMessage = function($tcp_connection, $data){

                self::$tcp_data = $data;//有消息就重新賦值,在onMessage時(shí)有時(shí)無(wú)
                self::$int_data++; //有消息就步進(jìn)加1 在onMessage可以正常得到結(jié)果

            }
        }
    }

    public static function onConnect($client_id) {
    }

   public static function onMessage($client_id, $message) {
        var_dump(self::$tcp_data);  //時(shí)而正常取值,時(shí)而為NULL,大多數(shù)情況為NULL
        var_dump(self::$int_data);  //一直正常輸出
   }

   public static function onClose($client_id) {
   }
}
3209 5 0
5個(gè)回答

walkor 打賞

onWorkerStart那里設(shè)置完$tcp_connection的各種回調(diào)后要加一個(gè)$tcp_connection->connect();不然不會(huì)發(fā)出異步鏈接,也不會(huì)觸發(fā)$tcp_connection->onMessage。

另外GatewayWorker是多進(jìn)程的,你的代碼只在0號(hào)進(jìn)程設(shè)置了異步鏈接,只有0號(hào)進(jìn)程靜態(tài)變量會(huì)有數(shù)據(jù),其它進(jìn)程靜態(tài)變量沒(méi)數(shù)據(jù)。如果客戶端請(qǐng)求被分配到其它進(jìn)程也會(huì)導(dǎo)致沒(méi)有數(shù)據(jù)。

其實(shí)這種問(wèn)題多echo var_dump下其實(shí)就出來(lái)了,可能self::$tcp_data = $data; 中的$data就是null

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

謝謝!

有$tcp_connection->connect();,忘貼上去了;
$data數(shù)據(jù)始終是有的,而且這個(gè)異步連接的onMessage消息回調(diào)比較高頻,每秒鐘可能會(huì)被回調(diào)幾十次,數(shù)據(jù)不會(huì)為空;
如果在進(jìn)程ID0里面異步連接,其他進(jìn)程無(wú)法獲取不到該數(shù)據(jù)的話,有沒(méi)有解決的辦法,即所有進(jìn)程都能讀取到進(jìn)程ID0的異步鏈接回調(diào)數(shù)據(jù)?(無(wú)法每個(gè)進(jìn)程都打開(kāi)相同的異步鏈接,有限制;也不能只開(kāi)一個(gè)work進(jìn)程)

因?yàn)閿?shù)據(jù)比較高頻,我想查看看回調(diào)的處理效率及沒(méi)來(lái)得及回調(diào)的數(shù)據(jù)存放在哪個(gè)系統(tǒng)哪個(gè)地方,有無(wú)辦法可以查看隊(duì)列/數(shù)據(jù)長(zhǎng)短?

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

異步鏈接獲取數(shù)據(jù)后放到redis等存儲(chǔ)中,onMesage里直接讀存儲(chǔ)。
處理頻率可以自己打印日志。沒(méi)有隊(duì)列。

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

我預(yù)計(jì)現(xiàn)在的處理效率已經(jīng)低于對(duì)端TCP數(shù)據(jù)的發(fā)送頻率,本機(jī)緩沖占滿,沒(méi)法接受新的TCP數(shù)據(jù),造成數(shù)據(jù)丟失,在這一塊,有什么方法可以調(diào)試嗎?還是概念有錯(cuò),TCP不會(huì)丟數(shù)據(jù)?

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

只要連接不斷開(kāi),TCP不會(huì)丟數(shù)據(jù)

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