繼續上一篇回合制的多人連線遊戲開發的思考,上一篇提到由Client一方其中一個玩家作主持人,當知道所有玩家都完成該回合時,發出開始新回合訊息。另一種做法,所有玩家都完成該回合時,通知Server,再由Server發施號令。兩種做法,那種較好?
Client作主持人
假設遊戲房間有4人,其中一人為主持人,如果玩家完成該回合時,Private Call通知主持人。由於Flash Player沒有可能用IP直接通訊,其實只不過是經過Server再轉送到主持人。如圖,共(n-1)*2=6次連線:
主持人收到並統計所有人都完成回合時,通知所有人開始,也是經過Server再轉送到所有人,共n+1=5次連線(不想因為Network Latency問題,主持人比其他人早開始,所以也送一份給自己,跟所有人一樣,收到訊息後才開始):
總數是(n-1)*2+(n+1)=3n-1=11
Server作主持人
所有玩家完成該回合時,通知Server,共4次連線:
Server知道所有人完成後,通知所有人開始,也是4次連線:
總數是2n=8
這樣說,Server作主持人可以較節省Bandwidth和減少Network Latency機會。我同意Server作主持人是比較美滿的做法。作主持人當然不只是信差角色而已,也有一些遊戲邏輯要執行,例如找出下一位擲骰子玩家,如果這些工作,可以Client端進行,是否可以減輕Server工作負擔?當然Client端進行的遊戲邏輯,容易作弊,也要考慮萬一作主持人的玩家登出後,要找人接替,進行途中遊戲邏輯,如何善後?這可能比交給Server處理更複雜。所以我又嘗試遊戲邏輯是所有人都各自進行,主持人真是只剩下一個作用,當信差來發施號令。
Client作主持人,Server端的架構可以較簡單,基本上不同遊戲都可以用同一個架構,不用度身加入遊戲邏輯部分,但將遊戲邏輯放在Client端SWF裡,現在Decompiler橫行的世界,是要留意考慮的因素之一。
13-5-2005補充
千萬不要用Client作主持人,有太多後遺症要解決。 |