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

AsyncTcpConnection連接wss出錯(cuò)

ROY

問題描述

使用 AsyncTcpConnection 作為Websocket客戶端,連接 wss://example.com/aaa/bbb?a=xxx&b=yyy
ws服務(wù)端在建立連接之后需要立即發(fā)送鑒權(quán)信息。然后進(jìn)行業(yè)務(wù)請(qǐng)求。

目前問題表現(xiàn)為:Sec-WebSocket-Accept not found. Header:
好像根本就沒有成功建立ws連接。響應(yīng)頭:

Sec-WebSocket-Accept not found. Header:
HTTP/1.1 401 No ticket
Cache-Control: max-age=0
Connection: close
Date: Sun, 11 Jun 2023 12:01:45 GMT
Pragma: no-cache
Server: daemon/3.0
Expires: Sun, 11 Jun 2023 12:01:45 GMT

調(diào)試過程中。使用JS作為客戶端連接沒問題。

JS 和 PHP代碼如下:

程序代碼或配置

JS代碼

var url = "wss://example.com/aaa/bbb?a=xxx&b=yyy"

var ws = new WebSocket(url, 'binary');
        ws.onopen = function() {
            ws.onmessage = function(e) {
                const reader = new FileReader();
                reader.onload = function(event) {
                    const text = event.target.result;
                    console.log(text);
                };
                reader.readAsText(e.data)
            };

            //心跳
            setInterval(function() {
                ws.send("2");
            }, 2*1000);
            //發(fā)送鑒權(quán)信息
            ws.send('username' + ':' + 'token' + "\n");
        };

PHP代碼


$url = 'ws://example.com/aaa/bbb?a=xxx&b=yyy';
$worker = new Worker();
$worker->onWorkerStart = function($worker) use (&$url, &$proxy) {

    $con = new AsyncTcpConnection($url);
    $con->transport = 'ssl';
    $con->websocketClientProtocol = 'binary';

    $con->onConnect = function ($con) {

    };

    $con->onWebSocketConnect = function($con) use (&$proxy) {        
        Timer::add(2, function() use ($con) {
            $con->send("2", true);
            $con->send("0:" . strlen("pwd") . ":" . "pwd");
            $con->send("0:" . strlen("\r") . ":" . "\r");
        });
        $con->send($proxy['data']['user'].':'.$proxy['data']['ticket']."\n");
    };

    $con->onMessage = function($con, $data) {
        echo "recv: $data\n";
    };

    $con->onClose = function($con) {
        echo "connection closed\n";
    };

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

    $con->connect();
};
1667 3 0
3個(gè)回答

six

返回頭里有 HTTP/1.1 401 No ticket,
找下對(duì)方接口的文檔,看下ticket是什么,怎么傳

  • ROY 2023-06-11

    js版本的代碼可以正常運(yùn)行。ticket這段代碼是js和php版本公用的。不會(huì)有問題。

ROY

研究了一下。

js中 WebSocket.onopen 是在ws連接建立后才會(huì)觸發(fā)。

所以應(yīng)該是 workerman的 ws都沒連接成功。不牽扯到發(fā)送的鑒權(quán)問題。。

應(yīng)該是在第一個(gè)ws握手請(qǐng)求的時(shí)候就是鑒權(quán)失敗了。
在這里url里攜帶的有鑒權(quán)信息。。。。。

  • 暫無評(píng)論
小W

1.先確認(rèn)是否鏈接成功。
2.如果鏈接成功,確實(shí)是否在發(fā)送鑒權(quán)數(shù)據(jù)時(shí)的問題,比如$conn->send($xxx,true);

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