nafos文档

nafos文档


注册Controller

<h4>一、注解:</h4> <p>@Controller [import nafos.core.annotation.controller.Controller] @Handle</p> <p>说明:在应用启动的时候,nafos会扫描所有被@Controller注解的类,然后注册@Handle注解的方法,在请求到来时,会根据注册时候的信息找到对应执行方法。 <br></p> <h4>二、Handle说明</h4> <pre><code class="language-java">public @interface Handle { String uri() default ""; //http的请求uri int code() default 0; //socket消息的code码 String method() default "POST"; //HTTP使用的请求方式。默认POST String type() default "PROTO"; //消息协议编解码,默认protobuf,可选JSON boolean printLog() default false; //是否对此次请求打印运行时间等相关信息 boolean runOnWorkGroup() default false; //是否在netty的work线程上执行 }</code></pre> <p>1.同一个应用内,controller方法支持JSON和protobuf两个编解码格式。用户可自由选择。 2.如果方法中无IO操作,用户可以设置runOnWorkGroup为true,减少上下文切换。 3.测试某个方法性能的时候,可以设置printLog来监控方法运行情况。 4.socket和http的路由controller都是有@handle和@Controller注册。 5.如果类上有@handle注解,那么uri注册时候将是类上的uri+方法上的uri哦。 <br></p> <h4>三、HTTP使用案例</h4> <pre><code class="language-java">@Controller @Handle(uri = "/login") public class LoginController { //登录 @Handle(uri = "/login", method = "POST") public Object login(User user) throws Exception { return user; } //登出 @Handle(uri = "/logout", method = "GET",runOnWorkGroup = true) public Object logout() { String sessionId = ThreadLocalHelper.getRequest().getNafosCookieId(); userService.logout(sessionId); return null; } @Handle(uri = "/getNotice", method = "POST",runOnWorkGroup = true,type = "JSON") public Object getNotice(Map map) { return new HomeView().setSysNoticeList(GameInitCache.sysNotices); } @Handle(uri = "/testJson1", method = "GET",runOnWorkGroup = true,type = "JSON") public Object testJson1(User user) { return new HomeView().setSysNoticeList(GameInitCache.sysNotices); }</code></pre> <p>更多用法就不全写出来了~除了protobuf GET方式无法接收参数外,其他随意猜测 <br></p> <h4>四、socket使用案例</h4> <pre><code class="language-java">@Controller public class LoginController { @Handle(code = 1000,runOnWorkGroup = true) public void tokenlogin(Channel channel,Curren curren,byte[] id) throws Exception { String sessionId = AESUtil.decrypt(curren.getStringParam()); // 验证token if (ObjectUtil.isNull(sessionId) || sessionId.length()!=18||!SecurityUtil.isLogin(sessionId)) { return; } ChannelConnectInitialize.initChannel(channel,sessionId,"message",SecurityUtil.getLoginUser(sessionId,User.class)); ChannelConnectManager.safe(channel); } }</code></pre>

页面列表

ITEM_HTML