圍棋遊戲邏輯判斷在客戶端還是服務端好?
做了個電腦圍棋聯機對弈軟體,因為是跨平台可以在mac和win上運行的,所以想到何不把遊戲邏輯都放在服務端,客戶端只要傳玩家落子的坐標到服務端就行了。這樣即使再有個web端,可以省去前端邏輯編寫了。
但是有幾個問題:1、websocket鏈接後網路傳輸會不會卡,因為客戶端不存在邏輯,導致落子後要傳伺服器運算後再傳回客戶端前端顯示,期間會不會要很久?2、服務端處理這麼多邏輯是消耗伺服器內存還是cpu?這麼多邏輯會不會太卡?
3、因為沒有什麼靜態資源要載入(客戶端直接下載好了),那麼伺服器帶寬是不是不需要很大?4、這些邏輯到底放客戶端還是服務端好?放客戶端會不會有安全問題,是不是也要服務端做個判斷?謝謝大家了
這個我來說說吧。本人是爛柯圍棋網的作者,爛柯圍棋所有下棋邏輯都在客戶端,這樣做有利也有弊,從現在網站的15萬盤對弈量來看,利完全大於弊。
先說缺點:當對弈雙方(含觀眾)間有數據包丟失時(如某一方的落子消息沒有傳到另一方),會發生雙方棋盤盤面不一致的情況,這時本地的邏輯控制會導致不允許某方落子,此局只能報廢。這種情況在爛柯目前的15萬盤中,出現過10盤左右,佔比0.0067%,當時急於查看日誌和分析原因,沒有向用戶詢問他們的網路情況。如果所有邏輯放伺服器端,就不會出現這種情況,大不了用戶重進一下房間,從伺服器獲取最新棋譜就行了。
再來說優點:速度快。具體是,1)判斷能否落子快。對弈時,滑鼠在棋盤上每移動一下,都需要向邏輯請求此位置是否能落子,如果邏輯在服務端,請求和響應會有延遲,比上面的缺點更加依賴網速。2)形勢判斷快。如果邏輯是伺服器端,用戶點擊形勢判斷後,步驟應該是這樣:向伺服器請求形勢判斷、伺服器從內存中取出此盤棋棋譜、運算、返回判斷結果、前端顯示。如果放在本地,則又與網速無關,本地判斷完顯示。這樣即減少了伺服器的運算壓力,也減少了數據流量。爛柯圍棋的形勢判斷做的不是很好,但響應很快,從點擊到顯示結果看不到延遲。3)復盤方便。這個就不多說了,所有棋譜都在本地,前進後退、試下、標記等操作都與伺服器無關,如有觀眾,需要將操作同步發向伺服器,伺服器再轉發到觀眾端。如果是用戶查看自己或他人的棋譜,在本地打譜,那就完全與伺服器無關,相當於一個客戶端軟體。另外,如果有一盤棋下到中盤,此時進來一個觀眾,觀眾想從頭打譜看看進程,這些也完全在本地完成,無需伺服器,這幾種情況下能明顯減伺服器開銷。4)點目速度快。這個同形勢判斷。
再說一下你提的安全問題,如果你指的客戶端是一個編譯好的可執行文件,沒有此問題。如果你所說的客戶端是指瀏覽器腳本(爛柯圍棋即是這種情況),可以對邏輯部分進行混淆再發布。退一步講,如果用戶對腳本做了人為修改,那麼出問題也是在他那一端,並不影響其它用戶,也不影響你的伺服器。
歡迎拍磚。謝邀。其實怎麼做都可以,你擔心的都不是什麼問題。伺服器做邏輯判斷當然值得提倡,沒你想的那麼耗cpu,也沒多少時間代價。關鍵你會不會寫出來,能寫出來就行了。客戶端嘛不做判斷也行,大不了伺服器打回來再考慮怎麼辦。不過只要你會寫,也是很簡單的事情。關於伺服器帶寬,哪有什麼帶寬問題,人家帶寬都是用來傳視頻的,你傳個棋盤棋子三張圖有什麼值得考慮的。伺服器只管轉發而不驗證也不是絕對不行,完全依賴客戶端也行。當然,這樣有被破解的可能,可是大部分用戶才懶得破解你的東西。可能用戶玩都懶得玩,現實很殘酷。
記住這句話:過早地優化是萬惡之源。先寫出來能用再說。
---我們的東西,當然是客戶端和伺服器的驗證邏輯都有,js,objective c,unity,android,ruby 。畢竟積累這麼久,這麼多用戶,也該完善了,有的邏輯基本上我就是逐行人工翻譯到另一種語言的;不過每次做新產品的時候,也是首先保證伺服器的邏輯,客戶端的相關代碼放在那裡,懶得去調用,實在有問題影響用戶體驗的時候再去調用。客戶端包含所有或部分的邏輯,以便在用戶落子或其他操作時,可以及時快速的做無效性判斷及提示,提高用戶體驗。
服務端包含所以操作合法性校驗邏輯,防止客戶端作弊及保證邏輯完整性。
現今的網路環境狀態及服務端性能可以輕鬆解決這些問題。據我所知當前主流圍棋對弈平台(如弈城,野狐等)的所有版本客戶端都包含有完整的遊戲邏輯,但伺服器驗證似乎是必須的。
為@白起的答案點了贊同,但還是想多說幾句。如果題主是想寫個玩具的話,最要緊的是開始寫……如果是想從事商業軟體研發,面向海量用戶,而圍棋是業務內容之一的話,那麼建議系統學習操作系統和分散式系統,掌握「估算」技能。我們不講過早優化,但也絕不是放任自流再秋後算賬,我們講控制。你擔心的這些,都是可以在寫代碼前就算明白的。當然,估算結論依然還是白起的答案,只是你不再需要問整整這一類的問題了。例外:如果你是寫人機對戰,要弄個AI的話……你說的這些就都不是重點了
推薦閱讀:
※圍棋史上的今天:12月19日 杭州神話 升班馬奪冠 一個豪門的誕生
※圍棋史上的今天:12月4日 一年兩逆轉 10億韓元 李昌鎬的極盛之年
※圍棋史上的今天:8月1日 愈期望愈沉重 被半目轉向的命運