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

onWorkerStart里面是stream流數(shù)據(jù),前端連接不上的問(wèn)題,求解答

jiangwz

問(wèn)題描述,謝謝解答

onWorkerStart里面是stream流數(shù)據(jù),導(dǎo)致前端連接失敗,因?yàn)樵诓煌5耐扑蛿?shù)據(jù),默認(rèn)沒(méi)有執(zhí)行完成,求1個(gè)思路,感謝。

后端代碼

<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use GuzzleHttp\Client;
use GuzzleHttp\Psr7;

require 'vendor/autoload.php';

$worker = new Worker("websocket://127.0.0.1:2000");

$worker->onWorkerStart = function ($worker) {
    // 創(chuàng)建一個(gè) Guzzle 客戶(hù)端實(shí)例
    $client = new Client();

    // 設(shè)置請(qǐng)求頭
    $headers = [
        'Content-Type' => 'application/json',
        'Authorization' => 'Bearer 123456789...'
    ];

    // 發(fā)起請(qǐng)求并傳遞請(qǐng)求頭
    $promise = $client->getAsync('這里是一個(gè)流鏈接地址,會(huì)不停的推送如下圖所示的數(shù)據(jù)', [
        'headers' => $headers,
        'stream' => true
    ]);

    // 等待Promise解析為響應(yīng)
    $response = $promise->wait();

    // 檢查響應(yīng)是否成功
    if ($response->getStatusCode() == 200) {
        // 獲取響應(yīng)體流
        $body = $response->getBody();

        // 逐行讀取數(shù)據(jù)
        while (!$body->eof()) {
            $line = Psr7\Utils::readLine($body);
            if ($line) {
                var_dump($line);

                // 在這里我想實(shí)現(xiàn),把line數(shù)據(jù)推送給前端連接對(duì)象,$line數(shù)據(jù)格式如下圖所示
                // 但是前端連接不上,上面代碼[ while (!$body->eof()) { ]逐行讀取影響了,因?yàn)樵诓煌5耐扑蛿?shù)據(jù),沒(méi)有執(zhí)行完成
                // 上面的while注釋掉,前端可以連接成功
            }
        }

        // 關(guān)閉流
        $body->close();
    } else {
        echo "請(qǐng)求失敗: " . $response->getStatusCode() . "\n";
    }
};

// 當(dāng)客戶(hù)端建立連接時(shí),不匹配則主動(dòng)斷開(kāi)
$worker->onConnect = function ($connection) {
    $connection->onWebSocketConnect = function ($connection, $http_header) {
        $token = $_GET["token"];
        $symbol = $_GET["symbol"];

        if ($token != '673eb112dcd3ca2a2d7024a84d8cd6ef') {
            $connection->close();
        } else {
            $connection->symbol = $symbol;
        }
    };
};

// 當(dāng)有客戶(hù)端發(fā)來(lái)消息時(shí),執(zhí)行的回調(diào)函數(shù)
$worker->onMessage = function (TcpConnection $connection, $data) {
    if ($data == "pong") {
        $connection->send('heartbeat');
    }
};

// 向所有驗(yàn)證的用戶(hù)推送對(duì)應(yīng)的數(shù)據(jù)
function broadcast($msg, $symbol)
{
    global $worker;
    foreach ($worker->connections as $connection) {
        $connection->send($msg);
    }
}

// 運(yùn)行worker
Worker::runAll();

前端代碼

<script type="text/javascript">
    ws = new WebSocket("ws://127.0.0.1/?token=673eb112dcd3ca2a2d7024a84d8cd6ef&symbol=EUR_USD");

    ws.onopen = function() {
        console.log("連接成功");
        var heartbeat = setInterval(function(){
            ws.send('pong');
        },10000);
    }

    ws.onmessage = function(e) {
        console.log(e.data);
    }
</script>

數(shù)據(jù)截圖

599 1 0
1個(gè)回答

walkor 打賞

workerman/http-client 替換guzzle

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