iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 26
0
自我挑戰組

卡牌遊戲開發日記v2020系列 第 26

Day26 思考遊戲的傳輸協議-2

單純記錄自己的思考盲點

連線協議讓我頭蠻痛的地方是我一直想不通要怎麼寫才比較好,因為以往寫的程式都是單機,不需要處理狀態同步的問題。

玩家必須收到系統通知到他的回合才能開始行動,但系統需要收到ACK封包才能確信玩家收到通知,往下一段程式碼執行。

但是扯到ACK封包的時候就代表我在處理TCP層以下的事情,python socket 照理說已經把下面的事情處理好了。所以可能還要把socket對於send()和recv()的說明看得更清楚一些。

這邊先假設send()結束回傳就代表client已收到封包並且回覆,那sever這邊就會繼續往下執行。

如何確定client收到封包?

  • 顯式ACK回應
  • send()結束即可(不確定,假設可以)

然後接收封包和發送封包最好的方式是拆分成兩個獨立的handler處理,原本我想把SYN+ACK放在一個函數內一起處理,不過後面看來好像沒辦法這樣子做。因為有可能收到其他不相關的封包(心跳事件)

發送和接收是分開獨立的事情,因為socket可能會出現其他類型的封包(事件)

  • 等待某封包進來時,addListener(),封包進來後,removeListener()
  • 當進來的封包不是目前可以處理的事件時,回傳錯誤。
  • deal, discard 需要sever確認沒問題才可往下

上一篇
Day25 思考遊戲的傳輸協議
下一篇
Day27 接下來的計畫
系列文
卡牌遊戲開發日記v202030

尚未有邦友留言

立即登入留言