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

workerman收不到設(shè)備響應(yīng)信息,抓包能看到設(shè)備的報(bào)文

calvin

問題描述

用workerman和設(shè)備建立連接后給設(shè)備發(fā)請(qǐng)求,收不到設(shè)備響應(yīng)的數(shù)據(jù) 詳情報(bào)文如圖,藍(lán)色框的是和設(shè)備建立連接后我這邊發(fā)送的請(qǐng)求,紅色框的是設(shè)備的響應(yīng),而workerman onMessage收到的還是綠色框的數(shù)據(jù)。
截圖
截圖

程序代碼或配置

完整的PHP代碼:

<?php

use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;

require_once __DIR__ . '/vendor/autoload.php';

global $http_worker;
// 創(chuàng)建一個(gè)Worker監(jiān)聽8001端口,使用http協(xié)議通訊
$http_worker = new Worker("http://0.0.0.0:8001");
// 啟動(dòng)4個(gè)進(jìn)程對(duì)外提供服務(wù)
$http_worker->count = 1;
// 新增加一個(gè)屬性,用來保存uid到connection的映射
$http_worker->uidConnections = array();

// 接收到瀏覽器發(fā)送的數(shù)據(jù)時(shí)回復(fù)hello world給瀏覽器
$http_worker->onMessage = function (TcpConnection $connection, Request $request) use ($http_worker) {
    // 向?yàn)g覽器發(fā)送hello world
    if ($request->method() === 'PUT') {
        $device = json_decode($request->rawBody(), true);
        if (isset($device['SerialNumber'])) {
            //  保存uid到connection的映射,這樣可以方便的通過uid查找connection
            $http_worker->uidConnections[$device['SerialNumber']] = $connection;
        }
        // 收到設(shè)備基礎(chǔ)信息
        var_dump($device);
        $res = $connection->send('');
        var_dump($res);
    } else if ($request->method() === 'GET') {
        /**
         * 和設(shè)備建立連接后,用瀏覽器觸發(fā)給設(shè)備發(fā)請(qǐng)求 http://127.0.0.1:8001/?id=21024125409SM5003983
         */
        $serialNumber = $request->get('id'); // 21024125409SM5003983
        if (isset($http_worker->uidConnections[$serialNumber])) {
            echo 'send to device' . PHP_EOL;
            $uri = '/SDCAPI/V1.0/AuthIaas/ActivaionStatus';
            $send_buffer = "GET $uri HTTP/1.1\r\n";
            $send_buffer .= "Host: 10.168.11.120\r\n";
            $send_buffer .= "Accept-Encoding: gzip,deflate\r\n";
            $send_buffer .= "Connection: keep-alive\r\n";
            $send_buffer .= "\r\n";
            $http_worker->uidConnections[$serialNumber]->send($send_buffer, true);
        } else {
            echo '未知的客戶端' . PHP_EOL;
        }
    }
};

$http_worker->onError = function ($connection_to_baidu, $code, $msg) {
    echo "Error code:$code msg:$msg\n";
};

// 運(yùn)行worker
Worker::runAll();
1345 2 0
2個(gè)回答

six

設(shè)備不識(shí)別你發(fā)的數(shù)據(jù),連接被設(shè)備重置斷開了

  • calvin 2023-08-24

    是指藍(lán)色框的請(qǐng)求數(shù)據(jù)設(shè)備不識(shí)別?但紅框的數(shù)據(jù)是設(shè)備響應(yīng)的,也是符合預(yù)期的

  • six 2023-08-24

    看起來是設(shè)備發(fā)給workerman一個(gè)Continuation請(qǐng)求,workerman不識(shí)別返回了 400 Bad Request,然后斷開了連接

  • calvin 2023-08-24

    我也是這么想的,而且workerman好像還重啟了,因?yàn)槎丝诤笤O(shè)備那邊會(huì)主動(dòng)在發(fā)起長(zhǎng)連接,成功后再發(fā)設(shè)備的基本信息過來,這信息通過onMessage收到了,也就是感覺又重新走了一遍

  • six 2023-08-24

    重啟的話workerman界面會(huì)提示,應(yīng)該沒重啟

  • calvin 2023-08-24

    那就奇怪了我給設(shè)備發(fā)信息$http_worker->uidConnections[$serialNumber]->send($send_buffer, true);后,onMessage被觸發(fā)了,但數(shù)據(jù)是綠框的內(nèi)容,但抓包工具上顯示設(shè)備只推了一次綠框的數(shù)據(jù)

不敗少龍

用GatewayWorker tcp接受設(shè)備的信息 websocket轉(zhuǎn)發(fā)給瀏覽器

  • calvin 2023-08-24

    通過瀏覽器觸發(fā)的那個(gè)get請(qǐng)求是發(fā)給設(shè)備的,而設(shè)備響的數(shù)據(jù)沒觸發(fā)onMessage而抓包有抓到設(shè)備響應(yīng)的信息

  • 不敗少龍 2023-08-24

    $connection->uidConnections[$serialNumber]->send($send_buffer, true); 發(fā)送那改成這個(gè)試試

  • calvin 2023-08-24

    不行,$http_worker->uidConnections[$serialNumber]->send($send_buffer, true)是能請(qǐng)求到設(shè)備,但是被響應(yīng)的數(shù)據(jù)收不到

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