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