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

關(guān)於前端websocket 判定是否離線 導(dǎo)致阻塞? Unity平臺

horskin

後端伺服器使用 : Linux + nginx +php7
前端使用:unity 的websocket 套件(C#)
以下是我簡略描述我的語法使用,下方這個是我在發(fā)送訊息給後端的函數(shù)

public void Action (string msg)
{
    if(!ws.isAlive() && isConnecting == false)
    {
        isConnecting = true;
        ws.close();
        reconnect();
        return;
    }
    ws.send(msg)
}

但是目前這樣有時候會觸發(fā)導(dǎo)致重新連線,目前是不規(guī)律觸發(fā)到
尤其在我要發(fā)送大封包的時候會斷線,想請問是因為發(fā)的封包太大的關(guān)係嗎(2MB左右)
還是發(fā)送資料的時候阻塞?
在懷疑是不是 ws.isAlive在偵測是否存活的時候剛好正在傳送資料導(dǎo)致誤判為斷線?
因為我是每10秒鐘一個HeartBet
會不會是因為在發(fā)送HeartBet的當(dāng)下也有其他正在傳送的資料導(dǎo)致阻塞?
我需要改用非同步去發(fā)送資料嗎? 還是使用柱列的形式像接收資料,先把資料放在柱列
再依序?qū)①Y料送出?


感謝版大的解答
目前先採用SendAsync 非同步方式來傳送資料,並且如果有資料傳送中
則先將要傳送資料放到佇列
因為一開始要克服主執(zhí)行緒的問題,我把所以send socket data 的動作都包成子執(zhí)行緒
導(dǎo)致同時傳送資料的時候,isAlive的判定方式應(yīng)該是ping socket看是否有回應(yīng),不過此時如果剛好有資料正在傳送的話,就會接不到socket回應(yīng)ping則誤判為離線。
這是我目前的推測,我先實驗看看是否有解決問題,我在把資料更新上來!

1227 1 0
1個回答

walkor 打賞

這幾句代碼看不出什么問題。
如果你懷疑是客戶端發(fā)送HeartBeat導(dǎo)致,可以嘗試關(guān)閉 HeartBeat 試下。
有可能是發(fā)送數(shù)據(jù)的過程中,中間參雜了一個HeartBeat包導(dǎo)致。

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