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

大佬 workerman推送一直返回fail

zhangweixing
<?php
use Workerman\Worker;
require_once VENDOR_PATH.'workerman/workerman/Autoloader.php';
// 初始化一個(gè)worker容器,監(jiān)聽1234端口
$worker = new Worker('websocket://0.0.0.0:1234');
// 這里進(jìn)程數(shù)必須設(shè)置為1
$worker->count = 1;
// worker進(jìn)程啟動(dòng)后建立一個(gè)內(nèi)部通訊端口
$worker->onWorkerStart = function($worker)
{
    // 開啟一個(gè)內(nèi)部端口,方便內(nèi)部系統(tǒng)推送數(shù)據(jù),Text協(xié)議格式 文本+換行符
    $inner_text_worker = new Worker('Text://0.0.0.0:5678');
    $inner_text_worker->onMessage = function($connection, $buffer)use ($worker)
    {
        global $worker;
        // $data數(shù)組格式,里面有uid,表示向那個(gè)uid的頁面推送數(shù)據(jù)
        $data = json_decode($buffer, true);
        $uid = $data;

        // 通過workerman,向uid的頁面推送數(shù)據(jù)
        $ret = sendMessageByUid($uid, $buffer);
        // 返回推送結(jié)果
        $connection->send($ret ? 'ok' : 'fail');
    };
    $inner_text_worker->listen();
};
// 新增加一個(gè)屬性,用來保存uid到connection的映射
$worker->uidConnections = array();
// 當(dāng)有客戶端發(fā)來消息時(shí)執(zhí)行的回調(diào)函數(shù)
$worker->onMessage = function($connection, $data)use($worker)
{
    // 判斷當(dāng)前客戶端是否已經(jīng)驗(yàn)證,既是否設(shè)置了uid
    if(!isset($connection->uid))
    {
        // 沒驗(yàn)證的話把第一個(gè)包當(dāng)做uid(這里為了方便演示,沒做真正的驗(yàn)證)
        $connection->uid = $data;

        /* 保存uid到connection的映射,這樣可以方便的通過uid查找connection,
         * 實(shí)現(xiàn)針對(duì)特定uid推送數(shù)據(jù)
         */

        $worker->uidConnections = $connection;
        return;
    }
};

// 當(dāng)有客戶端連接斷開時(shí)
$worker->onClose = function($connection)use($worker)
{
    global $worker;
    if(isset($connection->uid))
    {
        // 連接斷開時(shí)刪除映射
        unset($worker->uidConnections);
    }
};

// 向所有驗(yàn)證的用戶推送數(shù)據(jù)
function broadcast($message)
{
    global $worker;
    foreach($worker->uidConnections as $connection)
    {
        $connection->send($message);
    }
}

// 針對(duì)uid推送數(shù)據(jù)
function sendMessageByUid($uid, $message)
{
    global $worker;

    if(isset($worker->uidConnections))
    {
        $connection = $worker->uidConnections;
        $connection->send($message);
        return true;
    }
    return false;
}

// 運(yùn)行所有的worker(其實(shí)當(dāng)前只定義了一個(gè))
Worker::runAll();
3199 4 0
4個(gè)回答

keytehu

uid 不在線就返回fail啊

zhangweixing

不對(duì)吧

  • 暫無評(píng)論
zhangweixing

global $worker 是空

  • 暫無評(píng)論
keytehu

$worker = new Worker('websocket://0.0.0.0:1234');
改成
global $worker;
$worker = new Worker('websocket://0.0.0.0:1234');
試下呢

  • zhangweixing 2018-08-13

    你這樣是屬于新的進(jìn)程了吧?

  • keytehu 2018-08-13

    就是在$worker = new Worker(.. 那句代碼前加一句global $worker;,把$worker聲明為全局變量,怎么會(huì)產(chǎn)生新進(jìn)程?

  • zhangweixing 2018-08-13

    大佬 可以了 謝謝

  • keytehu 2018-08-13

    不客氣,我也是瞎猜的

  • phpcreeper 2018-08-13

    @4505: 1. 腳本的邏輯沒問題呢 2. 你肯定是客戶端對(duì)內(nèi)部端口發(fā)送數(shù)據(jù)格式或內(nèi)容有問題

  • phpcreeper 2018-08-13

    示例代碼是在當(dāng)前進(jìn)程里開啟的內(nèi)部端口,另外global 絕不會(huì)引起派生新進(jìn)程。

年代過于久遠(yuǎn),無法發(fā)表回答
??