• 游戏服务端中使用Servlet和Java注解的一个好设计


    SNS类游戏基本都是使用HTTP短连接,用Java来开发服务端时能够使用Servlet+Tomcat非常轻松的架构起服务端来。在这里介绍一种使用Servlet比較好的一种设计,我也见过非常多基于HTTP请求的游戏服务端使用Struts、Spring、Hibernate等等。事实上我感觉对于游戏来说使用这些东西非常繁琐。若是开发Java Web应用使用SSH倒是合情合理。

    使用Servlet时,我们能够仅仅创建一个Servlet左游戏中全部请求的入口,然后使用注解来标识方法,在程序启动时使用反射去收集注解的方法放到Map中,能够使用key=方法名。value=Method Object的方式,也另外定义一个协议号类。玩家的每一个操作相应一个协议号,以key=协议号,value=Method Object的方式存到Map中,依据client传过来的协议号或方法名到Map中取出MethodObject来运行,这种做有一些非常明显的优点就是全部的请求都在一个Servlet中统一处理,这样对异常处理就能够统一化,而且结构也非常清晰。

    以下是收集注解方法的代码:

    1、创建注解

    @Target(ElementType.METHOD)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface RequestMethod {
    	String name() default "";
    }
    2、注解方法(以下的方法放在RemoteService类中)

    	@RequestMethod(name = "login")
    	public Map<Object, Object> login(Map<String, String> params) throws Exception {
    		return userService.login(params);
    	}
    3、收集被注解的方法放到Map中

    	private static void processRemoteService() {
    		try {
    			Class<?> clazz = RemoteService.getInstance().getClass();
    			for (Method m : clazz.getMethods()) {
    				RequestMethod ann = m.getAnnotation(RequestMethod.class);
    				if (ann != null) {
    					//检查方法的參数类型和返回类型
    					//....
    					//...
    					if(ann.name().length() == 0){
    						
    					}else {
    						GlobalService.putToRemoteMap(ann.name(), m);
    					}
    				}
    			}
    		} catch (SecurityException e) {
    			e.printStackTrace();
    		}
    	}
    在Servlet中就能够依据client传过来的login字符串取出Login Method Object运行。



  • 相关阅读:
    每个Java开发人员都应该知道的10个基本工具
    2019年让程序员崩溃的 60 个瞬间,笑死我了
    面试官:服务器安装 JDK 还是 JRE?可以只安装 JRE 吗?
    腾讯工作近十年大佬:不是我打击你!你可能真的不会写Java
    作为Java开发人员不会饿死的5个理由
    趣味算法:国王和100个囚犯
    阿里第二轮面试:手写Java二叉树
    Linux软件安装——服务管理
    Linux帮助——重要文件
    Linux帮助——常用命令
  • 原文地址:https://www.cnblogs.com/zsychanpin/p/6950536.html
Copyright © 2020-2023  润新知