苦逼新人後臺調教坑爹排行榜


3樓貓 發佈時間:2023-10-18 14:32:23 作者:General_Bing Language

我們的遊戲在通關後有一個聯網的排行榜,這個是我負責開發的,主要就是打通前臺跟後臺的網絡通信。在團隊剛開始決定要做這個排行榜的時候我還是很開心的,因為我就是那種喜歡對著黑框框敲代碼的類型,我拿起了之前丟掉的後臺代碼,開始著手搭建服務器,大概花了兩天的時間,實現了單語言前後臺通信。 當我信心滿滿準備將我們現在的框架接入通信時,簡單看完框架的網絡組件後我傻眼了,我的後臺完全是用幾行簡陋的代碼拼湊出的一個骨架子,非常原始,還沒有成熟的網絡層,而框架的網絡組件是已經內置好網絡層的,如果我想要兩者對接,那麼我必須要在後臺搭建起一個簡易的網絡層。
這顯然是不可能的,因為實力有限,眼看著項目時間過半,這樣下去最後這個排行榜功能可能就出不來了,而且因為我同時還在部分管理項目,在我沉浸在後臺的這幾天壓力全部落到了策劃頭上。思前想後,最終我決定前臺也拋棄網絡層,用C#寫一個原始的通信腳本,完全捨棄框架的網絡組建,一來我不需要大量時間去學習框架,而C#我是有一點基礎的。二來這樣更節約時間,即使最終做不出來,也可以當場放棄專心管理項目,正所謂身輕好掉頭。 說幹就幹,決定了方向後我立馬打開百度“C#套接字編程”,再配合上我的《C#入門到入土》.pdf,我又花了兩天時間,終於實現了後臺與前臺的異語言通信,成功發送並接收了一個Hello字符串,至此,我鬆了一口氣,以為工作差不多就快完成了,但還沒等我懸著的心放下來,困難卻又接踵而至。 前後臺通信需要解析消息,我發個簡單的hello,後臺只需要全部拿住然後從二進制編碼轉化成str輸出就可以了。但如果是排行榜信息的話,至少也要知道玩家和排名吧?我就需要發送一個數據結構到後臺。即{Player:XX, Point:XXX}這種類型的數據。到這裡我就犯難了,之前在公司用過google的ProtoBuffer,只要接入它,就無需再擔心任何消息編碼解碼問題,於是我簡單去搜索了下,發現我正在使用的後臺語言因為太小眾,沒有多少社區生態,所以連Pb都沒有支持。與此同時,留給我的時間也寥寥無幾,如果這個功能再出不來,就會被砍掉。
正當我焦頭爛額,吃飯都沒心情之時,突然又想起了極限開發思維和我慣用的第一性思維原則,我苦哈哈的埋頭寫代碼,卻從來沒認真的審視過我遇到的困境和靜下心來做一個決策分析,於是我開始思考,我需要的是什麼,答案很簡單,一個排行榜,只要能顯示用戶和他的分數,再排下名就ok了。我再思考,為了達成這個目的,我需要幹什麼?答案是我需要讓前後臺能正常通信,發送用戶名和分數就夠了。既然如此,我遇到了什麼障礙?我馬上又思索並回答自己,為了發送用戶名和分數,我需要接入PB,而接入PB時間緊迫而且後臺語言沒有成熟的生態。想到這裡,我又問自己,既然這條路行不通,那麼有換一條路的可能嗎或者往回走?我思索了一下,換一條路的話,就意味著採用其他的編碼解碼協議,這同樣需要時間,而我對PB有使用經驗,所以時間只多不少,且不說後臺語言的生態連最常用的PB都沒有,如何能奢望它能有其他協議的支持呢?那麼後退呢,我完全放棄使用Pb可以嗎?我又開始思索,我使用PB是為了方便編碼解碼協議,這樣不管多複雜的數據都可以方便的進行通信。想到這裡我就立馬頓悟了,既然只有一個用戶名和分數,如此簡單的結構,殺雞焉用牛刀,我直接發送字符串,將用戶名與分數用逗號隔開,服務器接到後解析成字符串然後直接用字符串簡單地將其劈分成兩部分,分別取出來就可以了。說到底排行榜如此簡單的功能,直接發送字符串有何不可呢。至此我從技術的泥潭中脫身,現在就是造輪子階段,簡單的造個輪子比上各種複雜工具來得更快。我回到家就開始鍵走偏鋒,垮垮的敲代碼,雖然還遇到了另外的一些問題,但終於還是在最後把這個功能搶了出來。停下鍵盤的那一刻,彷彿整個世界都清淨了。 排行榜,待我得心應手之後,一定會讓你實現的。程序終是要上天堂的,最後再說一遍,後臺要開始加速了。話已至此,Made In ProtoBuf!


© 2022 3樓貓 下載APP 站點地圖 廣告合作:asmrly666@gmail.com