java游戲服務(wù)器編程,為什么Java不適合游戲開發(fā)?
作為一個(gè)多年游戲服務(wù)端開發(fā)者,我來回答一下這個(gè)問題。只要你仔細(xì)去招聘網(wǎng)站看,會發(fā)現(xiàn)游戲招java的非常少(我希望杠精不要抬杠,我說的少,而且非常少,并不是說沒有)。那么為什么在其他領(lǐng)域的霸主在游戲行業(yè)連喝口湯的資格都沒有呢?其實(shí)主要有兩個(gè)原因,而且這兩個(gè)原因都和程序員最關(guān)心的效率有關(guān)系,一個(gè)是開發(fā)效率,一個(gè)是運(yùn)行效率。很遺憾的作為一個(gè)不上不下的java兩個(gè)都占不了。
首先是開發(fā)效率,在幾年前手機(jī)游戲開始火爆,游戲公司多,產(chǎn)品相似度高,那么如何能以最快的速度開發(fā)完游戲并且上線運(yùn)營,在快速迭代中試錯(cuò),降低開發(fā)周期就是減少開發(fā)成本。在這種環(huán)境下,很多腳本語言成了首選,比如nodejs、php甚至還有l(wèi)ua和python(這里多說一句,別看lua語言本身簡單,其實(shí)lua在游戲領(lǐng)域的使用成本是非常高的,至少在這四種腳本語言中是最高的,因?yàn)樗皇且粋€(gè)膠水語言,要依附于c/c++,作為游戲周邊的庫都要自己造輪子或找輪子,同時(shí)對于引擎部分來說,對核心開發(fā)人員要求也非常高,如果公司沒有經(jīng)驗(yàn)豐富的c/c++程序員,lua基本玩不轉(zhuǎn))。在這些腳本語言面前,java毫無優(yōu)勢。nodejs開箱即用,用js可以前后端一起寫(html5的流行讓這種情況更是越來越多)。而php上手容易,開發(fā)簡單,而且像一些用http的弱交互游戲,熱更新簡直不要太爽,無感知修bug。一些簡單的休閑游戲,用這些腳本語言完全可以很快速的完成,就拿之前比較火的刀塔傳奇來說,用這些腳本語言一點(diǎn)壓力都沒有,還有特別是棋牌類游戲,腳本語言更是首選。
其次再來說說運(yùn)行效率,在一些密集型計(jì)算的游戲中,c++是首選,一些大型游戲,對計(jì)算要求很高,業(yè)務(wù)邏輯復(fù)雜的情況下,提升效率就能多容納在線人數(shù),也是成本的減少。同時(shí)對內(nèi)存要求也高,使用c++可以數(shù)著內(nèi)存寫代碼(手法過于夸張[捂臉]),對象啥時(shí)候申請,啥時(shí)候釋放都是程序員說了算,gc消耗不存在的。而java生成的都是字節(jié)碼,代碼執(zhí)行都要經(jīng)過jvm來跑,這中間的消耗對于那些對性能要求苛刻的程序來說,絕對不能接受。
綜合以上兩點(diǎn),java處于運(yùn)行效率和開發(fā)效率中間的語言,在游戲這個(gè)行業(yè)自然是不會受到青睞。
傳奇服務(wù)器用什么語言開發(fā)的?
在當(dāng)前:
1、游戲服務(wù)器端主要是數(shù)據(jù)庫管理和TCP通信(加密),用以實(shí)現(xiàn)它們的,最主要的幾種語言是微軟的C語言系和Borland公司(當(dāng)前其開發(fā)語言的子公司被EmbarcaderoTechnologies公司收購,這是題外話)的Delphi與BuilderC++。
2、事實(shí)上,由于Delphi與BuilderC++的開發(fā)快捷易懂,且與MSSQL或Oracle數(shù)據(jù)庫都能非常好的相容,所以,大多數(shù)游戲服務(wù)器端使用的是Delphi開發(fā)。
3、游戲服務(wù)器端的開發(fā),技術(shù)難度其實(shí)可能并不大,大的是并發(fā)的處理、系統(tǒng)資源的利用(同時(shí)在線能力),以及合理的數(shù)據(jù)表、情節(jié)安排、防黑防漏洞處理等。
4、相對來說,游戲客戶端設(shè)計(jì)在動畫技術(shù)、安全技術(shù)方面要難得多。
5、在當(dāng)前,典型的游戲服務(wù)端都使用三層結(jié)構(gòu):游戲客戶端與服務(wù)器端通信,服務(wù)器端再與數(shù)據(jù)庫服務(wù)端通信。
如何利用java將本地文件上傳到服務(wù)器?
1.首先在本地存放一個(gè)文件;
2.接著打開IDEA開始網(wǎng)絡(luò)編程,分別創(chuàng)建兩個(gè)類,客戶端類和服務(wù)器類;
3.接著在客戶端類中創(chuàng)建一個(gè)本地文件輸入流,讀取本地文件;同時(shí)創(chuàng)建Socket對象,并使用網(wǎng)絡(luò)字節(jié)輸出流向服務(wù)器發(fā)起傳輸文件的請求;
4.然后在服務(wù)器類中創(chuàng)建ServerSocket對象,并使用對象的getInputStream()方法讀取從客戶端傳來的文件;同時(shí)創(chuàng)建本地文件輸出流,用于寫出并將文件存放到服務(wù)器的指定位置;
5.服務(wù)器端接收并存儲文件成功后,服務(wù)器類需要向客戶端反饋相關(guān)信息,因此繼續(xù)使用Socket類的getOutputStream()方法反饋文件“上傳成功”的信息;客戶端類使用getInputStream()方法讀取服務(wù)器反饋的信息,完成一次通信;
6.最后,先啟動服務(wù)器類,在啟動客戶端類,查看文件是否上傳成功。
以上就是關(guān)于java游戲服務(wù)器編程和為什么Java不適合游戲開發(fā)的相關(guān)問題解答,希望對你有所幫助。