Java服務器開發之搭建遊戲基礎框架
最開始的項目是一個Maven構建的Java Web項目,使用Tomcat做爲Web容器來提供服務。
上圖是遊戲的一個最基礎架構的腦圖,下面是對應搭建好項目的目錄組織
java
下面講解這基礎的項目中最最最重要的一個文件:web.xml文件
當啓動Web項目會先讀取項目中的Web.xml配置文件。web
<welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <listener> <listener-class>com.server.core.boot.GameStartListener</listener-class> </listener> <servlet> <servlet-name>CheckTokenServlet</servlet-name> <servlet-class>com.server.core.login.CheckTokenServlet</servlet-class> <load-on-startup>0</load-on-startup> </servlet> <servlet-mapping> <servlet-name>CheckTokenServlet</servlet-name> <url-pattern>/login/CheckToken</url-pattern> </servlet-mapping> <servlet> <servlet-name>BackgroundManager</servlet-name> <servlet-class>com.server.game.backstage.BackgroundManager</servlet-class> </servlet> <servlet-mapping> <servlet-name>BackgroundManager</servlet-name> <url-pattern>/background/*</url-pattern> </servlet-mapping>
Web.xml的執行步驟:數據庫
-
執行listener和context-param服務器
- 所以咱們在Listener中將遊戲啓動起來,所以這裏調用啓動遊戲的代碼邏輯com.server.core.boot.GameStartListener
-
接着容器建立一個ServeltContext,項目全部部分都將會共享這個上下文架構
- 遊戲項目中用不到這個,所以不作定義
-
容器以context-param的name做爲鍵,value做爲值,將其轉化爲鍵值對,存入ServletContextapp
- 一樣用不到,不作定義
-
容器建立listener中的類實例,根據配置的class類路徑listener-class來建立監聽,在監聽中會有contextInitialized(ServletContextEvent args)初始化方法,啓動Web應用時,系統調用Listener的該方法,在這個方法中得到context-param的值就是application.getInitParameter(「context-param的鍵」);獲得這個context-param的值以後,你就能夠作一些操做了。框架
-
例子:你可能想在項目啓動以前就打開數據庫,那麼這裏就能夠在context-param中設置數據庫的鏈接方式(驅動、url、user、password),在監聽類中初始化數據庫的鏈接。這個監聽是本身寫的一個類,除了初始化方法,它還有銷燬方法,用於關閉應用前釋放資源。好比:說數據庫鏈接的關閉,此時,調用contextDestroyed(ServletContextEvent args),關閉Web應用時,系統調用Listener的該方法。jsp
-
所以結合第一步,咱們就會將遊戲邏輯啓動起來ide
public class GameStartListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent arg0) { GameServer.start(); } @Override public void contextDestroyed(ServletContextEvent arg0) { GameServer.stop(); } }
-
-
接着,容器會讀取filter,根據指定的類路徑來實例化過濾器。url
- 遊戲項目通常用不到,不作定義。
-
以上都是在WEB項目尚未徹底啓動起來的時候就已經完成了的工做。若是系統中有Servlet,則Servlet是在第一次發起請求的時候被實例化的,並且通常不會被容器銷燬,它能夠服務於多個用戶的請求。因此,Servlet的初始化都要比上面提到的那幾個要遲。
-
因爲遊戲項目中須要一些後臺功能提供給運營後臺來使用,所以遊戲項目中也須要定義幾個servlet
- 後臺管理servlet:BackgroundManager
- 後臺GMservlet:CheckTokenServlet
servlet代碼以下:
public class BackgroundManager extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { BackgroundService.getInstance().handle(req, resp); } }
-
總結
- 經過JavaWeb項目配置對應的web.xml的方式來做爲容器將遊戲項目啓動起來。
- 真正的遊戲啓動或關閉邏輯轉到對應的管理類中
- 經過xml中定義的遊戲啓動邏輯以及後臺查詢管理類來管理後臺對遊戲的一些操做
- 爲後臺提供一些基礎的操做遊戲邏輯功能
經過上面的兩部將能夠簡單的搭建起一個最基本的遊戲項目。你們能夠行動起來搭建看看。
下一節的內容預告以下