码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-06-11 07:01:15      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:

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中,根据客户端传过来的协议号或方法名到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中就可以根据客户端传过来的login字符串取出Login Method Object执行。



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

标签:

原文地址:http://blog.csdn.net/abc_key/article/details/46449833

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!