java遊戲伺服器,java遊戲伺服器架構實戰

本文目錄一覽:

java能做遊戲伺服器嗎

服務端的話,很多都是使用java來進行開發的,不過很多公司也是混用的,比如c++之類的都是可以的,還有很多腳本語言.

Java遊戲開發要學什麼

Java遊戲開發要學什麼?所謂的遊戲開發編程語言其實有很多,基本上任何一種語言都可以作為遊戲伺服器的編程語言。這需要根據自己遊戲的類型和要求加以選擇。比如C++,Java,Erlang,go等等。目前我用過的只有C++和Java.但是以Java為主。所以接下來就以自己的經驗,談談以Java為核心的遊戲伺服器開發技術體系。

Java目前作為遊戲伺服器開發語言已經很是普遍。但是大多數是作為頁游或手游的伺服器,而端遊戲一般選擇C++,因為端游對伺服器的性能要求相對比較高一些。兩種語言各有利弊。C++效率高,但是掌握度難些。沒有Java易於掌握。而目前對於追求快速上線率的頁游和手游來說,Java成了一個不錯的選擇。

一、Java的技術系統

需要學習的技術:

(1)Java基礎知識

(2)JavaNIO編程

(3)Netty,Mina網路框架精通一種,其它作為了解。

(4)一種緩存框架:Redis;memcache熟悉使用一個。

(5)SQL語言,用於資料庫:mysql資料庫

(6)springmvc主要用於http協議的伺服器

(7)多線程編程,明白線程安全的重要性。

(8)Java並發集合的掌握。

(9)Linux常用的基本命令及shell腳本。

(10)資料庫操作,比如mybatis。

以Java為伺服器編程語言來說,掌握Java的基本知識就不必說了,是必不可少的。可以參考《Java編程思想》,《Java核心技術》等書。根據遊戲通信協議的不同,大致有兩種實現方式:Socket和http。先說簡單些的http協議,這個協議已經很成熟的應用到了網站上。而Java語言也可以用於網站開發,所以相當就簡單些。現在有很多開源的伺服器軟體,比如:tomcat,resin等。遊戲前端不管是頁游flash,還是手游的Android,IOS都支持http協議,只要把遊戲的邏輯數據按post方法向伺服器發出請求即可了。

二、學習流程

當然了,學習這些東西並不是一蹴而就的。需要根據實踐循環漸進,這裡推薦一個學習流程:

(1)對於初學Java的人來說,如果自學能力好些,可以買些書自己練習,而現在又更的多選擇參加Java培訓機構,以快速的掌握Java的知識。

(2)掌握了Java知識之後,要多寫代碼實踐。這個時候可以結合mysql學習SQL語言,掌握資料庫的操作。比如用springmvc寫一個小網站,用mybatis實現網站數據的增,刪,改,查等功能。

(3)完成上步之後,可以在伺服器程序和資料庫之間加一個緩存,學習redis或memcache。

(4)把程序部署到linux伺服器上,練習linux的基本命令及shell腳

免責聲明:內容來源於公開網路,若涉及侵權聯繫儘快刪除!

java遊戲伺服器怎麼實現熱更新

在Java中,要實現熱部署,首先,你得明白,Java中類的載入方式。每一個應用程序的類都會被ClassLoader載入,所以,要實現一個支持熱部署的應用,我們可以對每一個用戶自定義的應用程序使用一個單獨的ClassLoader進行載入。然後,當某個用戶自定義的應用程序發生變化的時候,我們首先銷毀原來的應用,然後使用一個新的ClassLoader來載入改變之後的應用。而所有其他的應用程序不會受到一點干擾。

熱更新的思路:

定義一個用戶自定義應用程序的介面,這是因為,我們需要在容器應用中去載入用戶自定義的應用程序。

我們還需要一個配置文件,讓用戶去配置他們的應用程序。

應用啟動的時候,載入所有已有的用戶自定義應用程序。

為了支持熱部署,我們需要一個監聽器,來監聽應用發布目錄中每個文件的變動。這樣,當某個應用重新部署之後,我們就可以得到通知,進而進行熱部署處理。

景安河南最大的多線伺服器託管商,提供專業的雙機熱備、負載均衡等高可用/高並發服務!

深度解析Java遊戲伺服器開發

無論什麼語言,伺服器主要考慮的就是兩點,一是並發,二是數據(庫)對接,Java在這個方面很適合的。

並發除了有netty神庫以外,還有很多其他的網路庫,或者直接用tomcat也行,總之挺好,不過如果你要用netty的話,需要了解這個庫和並發編程,都有很多(經典)書,去看,不然你就等著踩坑吧。

數據(庫)方面,有memcache,radis的緩存庫,還有mysql和其他nosql,對接起來也很簡單,但是還是那句話,坑很多,需要自己填。

首先確定遊戲需不需要長鏈接的主動推送功能,再確定並發量(效率),就基本上可以確定用什麼庫和框架了,至於數據壓縮用gzip還是7z,傳遞協議是protobuff還是json還是xml,那都是細節問題了,總之都能解決問題,不要過早考慮性能啊什麼的,先把最簡單的登錄搞起來再說

java遊戲伺服器開發有前途嗎

最近剛跳槽,到新公司已經幹了有兩周時間了,這兩周時間是過得比較充實的,因為這家新公司是個小公司,以前以單機開發為主,伺服器方面我一個人,做兩個遊戲的伺服器開發工作,當然,一個很簡單,另一個就相對複雜點,簡單的那個是個弱聯網遊戲,伺服器只需要做好數據存檔和登錄支付驗證就好了,而另一個,則是相對複雜的slg遊戲,我感覺這是又一款cok,而公司目前並不打算再招伺服器了,所以估計這個項目我會一個人干到明年吧,等第一款上線賺錢了,可能會再招伺服器。老實說,面試的時候,我就覺得這份工作對我而言是一個挑戰,而當我清楚的了解了公司狀況之後,我依然決定接受這個挑戰。

說說我之前的經歷吧,大四的時候,學校安排來北京培訓java(培訓沒什麼丟臉的,出來找工作我也用的真學歷真背景,不像某峰互聯),之後我去了培訓機構推薦的公司實習,那個時候,工資2k,然而工作也幹得很開心,跟著前輩學到了不少東西,當時是做微信公眾號開發的,我跟著前輩做微信後台開發,當時使用SpringMVC+MyBatis框架,剛接觸的時候,我自己學了挺久才弄明白,後來弄明白之後想想,其實挺簡單,對於邏輯開發的程序員來說,你只需要弄懂工作流程就好了,頁面怎麼跳轉,跳轉怎麼傳值,數據怎麼處理,這些足夠了,當然我是個不滿足的人,我會去弄明白,為什麼用這個框架、為什麼不用別的、用這個有什麼好處、如果讓我自己來做這個後台、我會怎麼搭建?帶著這些問題,我會試著自己搭建一下後台框架(雖然前期大部分是複製粘貼)。除了框架部分,微信高級介面也是我研究的重點,我會去官方文檔看看微信是怎麼接入的,然後研究研究前輩的代碼是怎麼寫的,所謂的干一行愛一行大概就是這樣吧,當時我覺得,微信開發,是很有前途的,而我們公司用的框架,也是最先進的(後來看來,確實這個框架組合是當前最流行的框架,而當時,微信公眾號也確實是當時互聯網行業的一個風口,微信後來把h5帶起來了,導致現在一個好的h5前端都是供不應求的,薪資很高)。

說了這麼多,為什麼後來又轉行做遊戲了呢?其實是這樣的,當時在第一家公司,我的上級打算跳槽走了,帶走整個下面的技術,而不帶實習生,有那麼一兩個月,實習生就一直閑著沒事做,對於我來說,這樣過著就太無聊了,我喜歡挑戰,於是我投簡歷,重新找了份實習工作,在一個遊戲公司做java伺服器開發,公司挺大的,幾年前憑藉一款slg頁游稱霸遊戲行業(什麼遊戲我就不說了,說了就知道什麼公司了),後來遊戲行業往手游發展,這款slg也出了手游版,這一款遊戲,幾乎支撐了整個公司,再加上後來出的幾款手游,公司發展挺好的,我所實習的部門做的是一款mmorpg手游,從實習做到了轉正,做了近一年了,然而這款rpg手游的數據卻不是太好,第一次封測次日留存23,第二次26(現在這家公司的遊戲能達到80多次日留存),七日就更不用說了,而我也能感覺到,作為一款mmo遊戲,玩家之間的交互實在太少,從頭玩下來,我覺得這是一款單機,失去了mmo的本質,在項目組準備進行第三次封測的時候,我選擇了離開,原因很多,不僅僅因為遊戲數據不好,也有一些個人原因吧,不過說實話,是這家公司帶我走進了遊戲行業,我很感謝,我覺得遊戲行業是一個非常有前景的行業,甚至比之前我認為最好的微信開發還要好,遊戲行業非常暴利,在這家公司工作就能感受到,策劃文檔中,充滿了挖坑預留的計費點,這一塊可以正常玩兒,但你如果充錢,你就比別人牛逼。網路遊戲,最重要的,就是控制好平民玩家跟普通玩家的佔比以及遊戲平衡(當意識到公司的遊戲如此處心積慮想要坑錢的時候,我突然明白為什麼公司的遊戲大多被騰訊代理了,為什麼騰訊控股,原來如此,沒錢玩兒你**,哈哈)。由此也可以看出,遊戲的商業化,已經把遊戲公司帶入了一個固定的模式——無條件坑錢,我覺得已經失去了遊戲的本質,我看過一本書,叫《遊戲人生》(當時在cocos2014年開發者大會上買的。覺得挺值的),書已經送人了,但內容我看了一大半,從遊戲的產生,到玩家的心理,到為什麼需要遊戲,這本書都詮釋的熱別好(我覺得遊戲策劃都應該看看這本書,做良心遊戲,拒絕一味坑錢)。啊,突然發現這一段說的有點偏了,說到底,我也只是做遊戲伺服器開發的,我也改變不了遊戲行業,我只要做好我做的。其實大的遊戲公司,就應該走這種商業化路線,憑藉幾款長生命周期的遊戲,支撐公司流水。

從轉行做遊戲之後,我倒是覺得,遊戲開發比web開發有趣多了,當然技術上也比web難多了,之前發過一篇討論,web開發何和遊戲開發的區別,,我把我的答案再粘貼一遍(實際上是別人要求我上他的號去回答的,於是我就自己回答了我自己的問題):

1.從第三方支持來說,web後台有很多成熟的第三方框架,開發者不需要關心底層控制器跳轉的實現,只需要一個或幾個配置文件,就能完成核心控制器的部分,而開發者只需要關注web自身的業務邏輯,將邏輯與框架融合即可,使用框架一方面簡化控制層代碼,一方面很好的實現了業務邏輯的分層。而遊戲後台開發中,因為各種遊戲的需求差異性很大,從網路層,到業務邏輯層,各方面都必須根據自己遊戲需求搭建適合自己的框架,因此很難有一些通用的東西能提煉出來一款成熟的框架,遊戲後台開發基本上需要自己搭建適合自己的框架。

2.從業務邏輯層面來說,web後台基本上邏輯都是大同小異的,或許這一套系統,稍微改改,另一套系統就能用,而遊戲就不同了,每個遊戲都有自己的特色,根據策劃的不同需求而實現不同的邏輯,不過也會有一些通用的模塊,但整體上差異性還是很大的。

3.從數據持久化來說,web的數據基本上是很規整的,表與表之間關係很明確,並且以後也不會有太大的變化,而遊戲中的數據多種多樣,隨著開服之後,數據的變化也是多種多樣,甚至傳統的關係型資料庫根本無法滿足遊戲數據持久化的需求,遊戲中有很多狀態和數據是需要伺服器來保存的,我個人認為,在遊戲開發中,nosql比關係型資料庫更實用。

4.從通信層來說,web中的用戶都是一個個獨立的個體,而遊戲中是多人在線的一個遊戲世界,在這個遊戲世界中,玩家與玩家之間需要進行交互,這就需要伺服器實時的向所有在線玩家進行消息廣播,這一點很損耗伺服器性能的,在這方面,遊戲後台要比web做更多的處理,遊戲伺服器是一個IO密集的伺服器類型。

以上便是我當時的答案,或許我的見解尚淺,畢竟我做遊戲不到一年,不過對於後台開發這塊,我還是有一點話語權的,從實習遊戲開發開始,我便經歷了一個轉換的過程,幾乎又是一個從零開始的學習過程,從mina框架到protobuffer,這些東西,我相信web開發很少接觸(mina作為網路通信框架,web中幾乎只有http通信,protobuffer作為通信協議,web最多用json,其實二者形式上差別不大,但數據大小千差萬別)。而遊戲的邏輯,也是比web複雜得多,不得不說,web後台成熟的第三方框架是做的真的很好。

經歷了上家公司的洗禮,我想我對遊戲後台開發有了足夠的了解,於是我找到了我現在這家公司,這家公司目前只有我一個伺服器後台,做兩款遊戲,一款是塔防類,準備由單機改成弱聯網,伺服器存檔,並做登錄支付驗證,另一款,是比較龐大的slg手游,是準備帶領公司走上巔峰的項目,說一款slg帶領一個公司走上巔峰一點兒不為過,我上家公司就是這樣的,憑藉一款《xxxx》(哈哈,名字不透露),走上人生巔峰。我之所以接受這份工作,是因為我接受挑戰,從底層寫起,從架構寫起,這是作為一年工作經驗的我想都不敢想的,不過這是一個挑戰自我,證明自我的機會,我願意接受這個挑戰,人生總會有很多爬坑的時候,但爬過了坑,就真的是人生巔峰了。我接受這個工作的另一個原因,就是公司發展確實不錯,以前做的單機,都是很火的(雖然我認為我自己一個人也能做,我也是學過cocos的),而現在公司也準確的把握了遊戲行業的風口——slg,coc和cok的成功案例就能證明一切,mmorpg也不一定能做起來了,moba倒是有可能,但你要跟lol做不到80%的相似,我估計沒人願意在手機玩兒moba,slg或許是性價比最高的了。這麼有挑戰的工作,還要從架構寫起,這樣的挑戰,我喜歡!

說說互聯網業的書吧,我認為這個行業的書,分為兩種,理論型的和技術型的,所謂理論型,就是長篇大論互聯網發展,行業模式等,而技術型,就是類似技術的工具書,是從技能入手的書,這兩種書,我家裡都有,但我發現買了之後,我很少有時間看,下班沒多少時間,北京上班,大多數時間都浪費在地鐵上了,上班時間,看看理論型的吧,覺得啰嗦,浪費時間(後來我發現,做這行,除了會技術,你還是需要去看看牛人眼中的互聯網的,你需要透過前輩的眼光看世界,不要做IT民工,要做互聯網從業者),看看技術型的吧,讓別人看見了感覺你太low,所以我大多數時間還是能在網上down到pdf就在電腦看,down不到百度谷歌我要研究的技術,畢竟從事這行,還是用電腦學技術好點,主要是電腦看久了眼睛會疲憊,偶爾看看紙質的書也不錯的。而以前面試的時候,面試官經常問,除了大學課本,你還看什麼書啊?(如果是你們,恰巧又沒看什麼書,你們怎麼說?),我一般會說,我會自學其他技術,如cocos2dx,然後買一些技術指南之類的書看。我覺得這已經算最大誇張化了,因為大學我真的很少看書,我記憶中就看過一本C++技術類的,一本C#的,一本Android,還有其他幾本是什麼都不大記得了,大學畢竟十幾層的圖書館,除了英語四六級的時候進去複習,其他時間感覺都浪費了這十幾層的圖書館。

說說成長過程中遇到的問題吧,如果遇到我解決不了的,以前是先自己百度谷歌,看看有沒有辦法解決,不行就問老大,而現在,先百度谷歌,看有沒有辦法解決,沒辦法在百度谷歌,實在不行還要看框架源碼如何實現,上國外論壇看外國友人如何解決,問題總能解決的,總會有辦法的。當我開始學習寫架構的時候,我會開始關心遊戲的網路層使用什麼框架,mina還是netty,數據怎麼存儲mysql還是mongo,是否需要緩存redis存什麼,memcached存什麼,緩存什麼數據,數據傳輸用什麼協議,json還是protobuffer,怎麼寫效率高,最高支持多少並發等等,我想這些都是我現在需要考慮的問題,當然這些都需要根據遊戲具體的需求來決定的,最終伺服器能否高效穩定的運行,都是取決於我的架構是否高效穩定,所以這個過程我要不斷學習,不斷吸取別人的經驗。剛到新公司的時候,我才體會到,自己寫代碼其實也是一種挑戰,整個後端我自己一個人實現,代碼是否規範,數據如何存儲,都是我說了算,我想我的代碼不僅要高效,還要讓別人看得懂,後來的人能接著我的代碼繼續寫下去。

最後說說Java的題外話,語言之爭,從未停過,為什麼有人擁護Java,有人擁護PHP,有人喜歡C#,有人喜歡C++,各個語言各有各的優勢,業餘時間,我也了解了不少其他語言,go,node.js我都有了解,我覺得go的語言層面支持協程並發以及node.js的非同步,都是很適合遊戲伺服器的,我特別看好node.js,非同步io真的是對遊戲伺服器很好的特性,並且加入對原聲js支持的mongo模塊也是很方便的(上面我有說到,我相信nosql是很適合存儲遊戲數據的)。說到遊戲行業,我認為h5遊戲的發展也是越來越快了,上次白鷺的h5開發者生態大會我去了,白鷺的一整套工作流程,以及web vr,真的很令人興奮(第一輪抽獎我還抽了一個暴風魔鏡,哈哈!),另外,大會的模特挺漂亮,哈哈!2015年,互聯網行業也略呈下降趨勢了,不少創業公司面臨倒閉,泡沫經濟破滅,因為很多老闆抓不住當前經濟形勢,以為不管是啥,有個app就是創業了,其實全然不知一款app後面有多少運營模式、盈利模式,就像一句諷刺的話,「我有個絕壁好的idea,可以顛覆bat,什麼都不缺,就缺個程序員了,等等,千萬別告訴馬雲!」,哈哈,聽到這句話,當時我就笑了,估計好多倒閉的創業公司老闆都這麼想的吧,他們並不能抓住用戶真正的需求,只有抓住用戶真正的需求,才會抓住用戶的心,真正活下來的,才是用戶真正需要的,然而,相對來說,遊戲行業更是複雜多變,或許今天玩家喜歡這種遊戲,明天玩家就喜歡另一種遊戲了,就像我們永遠也想不到,flappy bird、圍住神經病貓這類的遊戲竟然能活起來,愚公移山竟然也能讓h5遊戲變為付費的可能。就像一句話,「只要站在風口上,豬也能飛起來!」,只要抓住了玩家此時此刻真正想要的,產品就一定能做起來。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/228718.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-10 12:08
下一篇 2024-12-10 12:08

相關推薦

  • 為什麼不用Python開發遊戲

    Python是一種高級編程語言,擁有簡單易學、代碼簡潔等優點。同時,Python也是一種多用途的語言,可以用於Web開發、數據分析以及機器學習等領域。然而,對於遊戲開發領域,Pyt…

    編程 2025-04-29
  • 伺服器安裝Python的完整指南

    本文將為您提供伺服器安裝Python的完整指南。無論您是一位新手還是經驗豐富的開發者,您都可以通過本文輕鬆地完成Python的安裝過程。以下是本文的具體內容: 一、下載Python…

    編程 2025-04-29
  • STUN 伺服器

    STUN 伺服器是一個網路伺服器,可以協助網路設備(例如 VoIP 設備)解決 NAT 穿透、防火牆等問題,使得設備可以正常地進行數據傳輸。本文將從多個方面對 STUN 伺服器做詳…

    編程 2025-04-29
  • 解決docker-compose 容器時間和伺服器時間不同步問題

    docker-compose是一種工具,能夠讓您使用YAML文件來定義和運行多個容器。然而,有時候容器的時間與伺服器時間不同步,導致一些不必要的錯誤和麻煩。以下是解決方法的詳細介紹…

    編程 2025-04-29
  • 使用Python製作遊戲代碼

    Python是一種高級編程語言,因其簡潔明了的代碼風格、易於學習和使用而備受青睞。Python已經成為遊戲製作的熱門選擇之一,可以通過Pygame、Panda3D等工具來實現遊戲制…

    編程 2025-04-29
  • Django框架:從簡介到項目實戰

    本文將從Django的介紹,以及如何搭建Django環境開始,逐步深入到Django模型、視圖、模板、表單,最後通過一個小型項目實戰,進行綜合性的應用,讓讀者獲得更深入的學習。 一…

    編程 2025-04-28
  • pythoncs架構網盤client用法介紹

    PythonCS是一種使用Python編寫的分散式計算中間件。它具有分散式存儲、負載均衡、任務分發等功能。pythoncs架構網盤client是PythonCS框架下的一個程序,主…

    編程 2025-04-28
  • 鍵值存儲(kvs):從基礎概念到實戰應用

    本文將從基礎概念入手,介紹鍵值存儲(kvs)的概念、原理以及實戰應用,並給出代碼實現。通過閱讀本文,您將了解鍵值存儲的優缺點,如何選擇最適合的鍵值存儲方案,以及如何使用鍵值存儲解決…

    編程 2025-04-28
  • Python貪吃蛇遊戲設計報告

    本文將從遊戲設計的目標、實現思路、技術要點、代碼實現等多個方面對Python貪吃蛇遊戲進行詳細闡述。 一、遊戲設計的目標 貪吃蛇是一款經典的遊戲,我們的遊戲設計不僅要實現基本的玩法…

    編程 2025-04-28
  • Python編程實戰:用Python做網頁與HTML

    Python語言是一種被廣泛應用的高級編程語言,也是一種非常適合於開發網頁和處理HTML的語言。在本文中,我們將從多個方面介紹如何用Python來編寫網頁和處理HTML。 一、Py…

    編程 2025-04-28

發表回復

登錄後才能評論