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

gateway使用心跳報(bào)文,服務(wù)端ws鏈接仍然會斷開鏈接

yifenbushe

問題描述

使用gateway做長連接,未做心跳時(shí),1分鐘不發(fā)送消息就斷開鏈接,增加心跳報(bào)文后,分鐘左右也會斷開鏈接,不清楚什么原因。

程序代碼

終端心跳報(bào)文計(jì)時(shí)如下,每次收到、發(fā)送消息都會重新計(jì)時(shí),終端ws.closed已經(jīng)注釋掉:
let timer;

// 定時(shí)器函數(shù)
function startTimer() {
    clearInterval(timer); // 確保只有一個(gè)定時(shí)器在運(yùn)行

    // 發(fā)送ping報(bào)文的邏輯
    function sendPing() {
        ws.send('ping');
        console.log("發(fā)送ping報(bào)文");
        // 重置計(jì)數(shù)器的邏輯
        resetTimer();
    }

    // 啟動定時(shí)器
    timer = setInterval(sendPing, 50000); // 每50秒執(zhí)行一次sendPing函數(shù)
}

// 重置計(jì)數(shù)器函數(shù)
function resetTimer() {
    clearInterval(timer);
    startTimer();
}

// 啟動定時(shí)器
startTimer();

服務(wù)端把start_gateway.php中注釋代碼去掉,簡單做了修改如下:

// 心跳間隔
$gateway->pingInterval = 55;
// 心跳數(shù)據(jù)
$gateway->pingData = 'ping';

報(bào)錯(cuò)信息

WebSocket is already in CLOSING or CLOSED state.

截圖報(bào)錯(cuò)信息里報(bào)錯(cuò)文件相關(guān)代碼

截圖

操作系統(tǒng)及workerman/webman等框架組件具體版本

操作系統(tǒng)ubuntu;
Workerman version:4.1.11
PHP version:8.1.2-1ubuntu2.13

1660 1 0
1個(gè)回答

latin

"每次收到、發(fā)送消息都會重新計(jì)時(shí)" 這個(gè)感覺會出現(xiàn)bug。如果服務(wù)端強(qiáng)制要求每55秒發(fā)一個(gè)心跳包,但是你延遲了下比如60秒才發(fā)送,那么連接可能就被服務(wù)端斷開了。

  • yifenbushe 2023-08-13

    但是發(fā)消息之后5分鐘一直都可以正常通信,斷開是在定時(shí)發(fā)送ping的過程

  • yifenbushe 2023-08-14

    而且刷新界面,重新建立鏈接,一個(gè)消息也不發(fā)的情況下,還是會自動斷開,只是斷開時(shí)間不一樣,有一個(gè)瀏覽器窗口400s斷開了,有一個(gè)500s+了還沒斷開,奇怪,感覺不穩(wěn)定,環(huán)境在虛擬機(jī)中,理論上不會是網(wǎng)絡(luò)的問題

  • yifenbushe 2023-08-14

    自己頂下帖子吧,有可能是瀏覽器原因,firefox就不會斷開,但是,chrome就會斷開,網(wǎng)上查詢可能對websocket處理機(jī)制不一樣,chrome發(fā)生心跳報(bào)文后,還需要接收到心跳報(bào)文才行,不然認(rèn)為已斷開,求證?。?/p>

  • 小W 2023-08-14

    之前我也遇到過chrome瀏覽器沒有任何操作一段時(shí)間就會自動斷開,使用ws測試工具試一下

  • latin 2023-08-14

    那就gatewayWorker收到心跳返回一個(gè)數(shù)據(jù)試下唄

  • yifenbushe 2023-08-14

    chrome 使用在線測試工具,在發(fā)送不固定的幾個(gè)ping包之后,就出現(xiàn)10:34:19 => CLOSED => 1006 CLOSE_ABNORMAL,firefox 不會,一直處于正常情況。
    網(wǎng)上解釋:
    當(dāng)Chrome瀏覽器不符合WebSocket標(biāo)準(zhǔn)時(shí),情況就是這樣。當(dāng)服務(wù)器啟動關(guān)閉并向客戶端發(fā)送關(guān)閉幀時(shí),Chrome認(rèn)為這是錯(cuò)誤,并使用代碼1006并沒有原因消息將其報(bào)告給JS端。在我的測試中,Chrome從未響應(yīng)服務(wù)器啟動的關(guān)閉幀(關(guān)閉代碼1000),表明代碼1006可能表示Chrome正在報(bào)告自己的內(nèi)部錯(cuò)誤。

    PS Firefox v57.00可以正確處理此情況,并成功將服務(wù)器的原因消息傳遞給JS端。

  • yifenbushe 2023-08-14

    已解決:
    業(yè)務(wù)端處理心跳報(bào)文,并返回一個(gè)包,問題解決。

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