Java服务器开发之搭建游戏基础框架

最开始的项目是一个Maven构建的Java Web项目,使用Tomcat作为Web容器来提供服务。

在这里插入图片描述
上图是游戏的一个最基础架构的脑图,下面是对应搭建好项目的目录组织

在这里插入图片描述

下面讲解这基础的项目中最最最重要的一个文件:web.xml文件

当启动Web项目会先读取项目中的Web.xml配置文件。

	<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作为值,将其转化为键值对,存入ServletContext

    • 同样用不到,不做定义
  • 容器创建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的该方法。

    • 因此结合第一步,我们就会将游戏逻辑启动起来

      public class GameStartListener implements ServletContextListener {
      
      	@Override
      	public void contextInitialized(ServletContextEvent arg0) {
      		GameServer.start();
      	}
      
      	@Override
      	public void contextDestroyed(ServletContextEvent arg0) {
      		GameServer.stop();
      	}
      
      }
      
  • 接着,容器会读取filter,根据指定的类路径来实例化过滤器。

    • 游戏项目一般用不到,不做定义。
  • 以上都是在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);
      	}
      }
      

总结

  1. 通过JavaWeb项目配置对应的web.xml的方式来作为容器将游戏项目启动起来。
    • 真正的游戏启动或关闭逻辑转到对应的管理类中
  2. 通过xml中定义的游戏启动逻辑以及后台查询管理类来管理后台对游戏的一些操作
    • 为后台提供一些基础的操作游戏逻辑功能

通过上面的两部将可以简单的搭建起一个最基本的游戏项目。大家可以行动起来搭建看看。

下一节的内容预告如下

在这里插入图片描述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐