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

getwayworker中client_id問(wèn)題

lbfeng

問(wèn)題描述

用getwayworker和手表端建立一個(gè)長(zhǎng)連接,手表每次開機(jī)會(huì)給服務(wù)器發(fā)過(guò)來(lái)登錄包,登錄包里面還有設(shè)備id,后面的數(shù)據(jù)不會(huì)再有設(shè)備id,服務(wù)器進(jìn)行相關(guān)處理綁定client_id和設(shè)備id并記錄,以后接收的數(shù)據(jù)依靠client_id區(qū)分是哪臺(tái)設(shè)備?,F(xiàn)在遇到一個(gè)問(wèn)題,這個(gè)client_id突然發(fā)生變化,導(dǎo)致在系統(tǒng)中根據(jù)此client_id找不到相應(yīng)的設(shè)備id,并且長(zhǎng)時(shí)間由于之前的client_id沒(méi)有數(shù)據(jù)傳輸斷開連接,這個(gè)手表的數(shù)據(jù)沒(méi)有辦法再進(jìn)行判斷存儲(chǔ)。其實(shí)就是手表扔和服務(wù)器進(jìn)行著連接,client_id在沒(méi)有經(jīng)過(guò)登錄包情況下突然發(fā)生變化導(dǎo)致系統(tǒng)根據(jù)這個(gè)新的client_id找不到設(shè)備,致使這臺(tái)設(shè)備的數(shù)據(jù)也就中斷。有沒(méi)有大神遇到過(guò)這種問(wèn)題,知道怎么解決

![](/upload/img/20230729/2964c48ecee16a.png)

1390 5 0
5個(gè)回答

efnic
  1. 設(shè)備端的手表,向getwayworker發(fā)起連接,getwayworker返回client_id,uniqid等
  2. 手表端向API接口發(fā)起綁定請(qǐng)求,請(qǐng)求包含getwayworker下發(fā)的2個(gè)參數(shù)、以及手表本身的設(shè)備id等參數(shù)
  3. 設(shè)備端的手表,需要做心跳,每隔x秒,給服務(wù)器發(fā)送一個(gè)ping;
  4. getwayworker在收到ping時(shí),給手表回復(fù)一個(gè)pong
  5. 手表端的長(zhǎng)連接斷線時(shí),重復(fù)步驟1.

憑設(shè)備id,向手表推送數(shù)據(jù)。

muyu

client_id變了說(shuō)明連接斷了,重新發(fā)起鏈接了,可以在close和connect里面重新處理client_id和設(shè)備id的關(guān)系映射

  • 暫無(wú)評(píng)論
Gin
  • 暫無(wú)評(píng)論
admin

clientID是一個(gè) buff,內(nèi)部包含了gateway的ip端口和numIndex 打包壓縮成hex的,你可以反向解析

  • 暫無(wú)評(píng)論
latin

業(yè)務(wù)不應(yīng)該依賴client_id,應(yīng)該依賴設(shè)備id。client_id是一個(gè)臨時(shí)id,不應(yīng)該存儲(chǔ)使用。
正確做法,設(shè)備發(fā)起登錄時(shí)利用 Gateway::bindUid($client_id, $設(shè)備id); 綁定,
然后以后所有操作都是操作設(shè)備id,比如發(fā)送信息用 Gateway::sendToUid($設(shè)備id, 數(shù)據(jù)),
判斷設(shè)備是否在線用 Gateway::isUidOnline(設(shè)備id);

  • lbfeng 2023-07-31

    Gateway::bindUid($client_id, $設(shè)備id)這個(gè)我已經(jīng)綁定過(guò),如果通過(guò)服務(wù)器給手表下發(fā)指令是可以直接用設(shè)備id下發(fā)的,還有一個(gè)就是要接收設(shè)備傳出過(guò)來(lái)的tcp數(shù)據(jù),不知道什么情況這個(gè)接收數(shù)據(jù)老是中斷,現(xiàn)在排查出來(lái)的原因是兩個(gè):(1)設(shè)備網(wǎng)絡(luò)不好會(huì)斷開(2)傳輸過(guò)來(lái)的數(shù)據(jù)連接id突然發(fā)生變化,這個(gè)是在沒(méi)有發(fā)生登錄情況下連接id變了,沒(méi)辦法發(fā)生綁定關(guān)系,所以系統(tǒng)拿著這個(gè)連接id找不到相應(yīng)的設(shè)備致使傳輸數(shù)據(jù)中斷

  • efnic 2023-08-01

    對(duì)接長(zhǎng)連接,有幾個(gè)基本操作:
    1.連接時(shí)候用設(shè)備id和客戶端id,請(qǐng)求接口綁定;
    2.做好心跳
    3.做好重連機(jī)制(低段位的肯定在onClose注冊(cè)個(gè)斷線重連,這種基本就是傻)

  • efnic 2023-08-01

    重連機(jī)制:
    1.創(chuàng)建一個(gè)全局生命周期的定時(shí)器(注意只能創(chuàng)建一次,無(wú)限制創(chuàng)建定時(shí)器客戶端會(huì)崩)
    2.連接建立后,周期性的每30s向服務(wù)器發(fā)送心跳包,比如ping
    3.服務(wù)器收到客戶端心跳包ping時(shí),回復(fù)pong
    4.客戶端僅記錄最后收到pong的時(shí)間戳
    4.由全局定時(shí)器檢查網(wǎng)絡(luò)狀況是否良好
    if (lastPong + 30 *1.5 < now) {
    //超時(shí)重連 todo
    }

  • lbfeng 2023-08-01

    謝謝啦 知道是設(shè)備的連接id突然變了導(dǎo)致的,但是沒(méi)找下好的解決辦法,我嘗試把新的連接id摧毀,發(fā)現(xiàn)摧毀后設(shè)備會(huì)重新自動(dòng)發(fā)起連接,倒是也能解決我的問(wèn)題,謝謝大神的方案

  • lbfeng 2023-08-01

    由于手表端系統(tǒng)不是我們開發(fā)的,他們的心跳也給的是10分鐘一次,排查受限,只能從服務(wù)器端入手

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