後端伺服器使用 : Linux + nginx +php7
前端使用:unity 的websocket 套件(C#)
以下是我簡略描述我的語法使用,下方這個(gè)是我在發(fā)送訊息給後端的函數(shù)
public void Action (string msg)
{
if(!ws.isAlive() && isConnecting == false)
{
isConnecting = true;
ws.close();
reconnect();
return;
}
ws.send(msg)
}
但是目前這樣有時(shí)候會(huì)觸發(fā)導(dǎo)致重新連線,目前是不規(guī)律觸發(fā)到
尤其在我要發(fā)送大封包的時(shí)候會(huì)斷線,想請(qǐng)問是因?yàn)榘l(fā)的封包太大的關(guān)係嗎(2MB左右)
還是發(fā)送資料的時(shí)候阻塞?
在懷疑是不是 ws.isAlive在偵測是否存活的時(shí)候剛好正在傳送資料導(dǎo)致誤判為斷線?
因?yàn)槲沂敲?0秒鐘一個(gè)HeartBet
會(huì)不會(huì)是因?yàn)樵诎l(fā)送HeartBet的當(dāng)下也有其他正在傳送的資料導(dǎo)致阻塞?
我需要改用非同步去發(fā)送資料嗎? 還是使用柱列的形式像接收資料,先把資料放在柱列
再依序?qū)①Y料送出?
感謝版大的解答
目前先採用SendAsync 非同步方式來傳送資料,並且如果有資料傳送中
則先將要傳送資料放到佇列
因?yàn)橐婚_始要克服主執(zhí)行緒的問題,我把所以send socket data 的動(dòng)作都包成子執(zhí)行緒
導(dǎo)致同時(shí)傳送資料的時(shí)候,isAlive的判定方式應(yīng)該是ping socket看是否有回應(yīng),不過此時(shí)如果剛好有資料正在傳送的話,就會(huì)接不到socket回應(yīng)ping則誤判為離線。
這是我目前的推測,我先實(shí)驗(yàn)看看是否有解決問題,我在把資料更新上來!