關於前端websocket 判定是否離線 導致阻塞? Unity平台

horskin

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

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

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


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

678 1 0
1个回答

walkor

这几句代码看不出什么问题。
如果你怀疑是客户端发送HeartBeat导致,可以尝试关闭 HeartBeat 试下。
有可能是发送数据的过程中,中间参杂了一个HeartBeat包导致。

  • 暂无评论
年代过于久远,无法发表回答
🔝