package com.ls.tcpServer.controller;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import org.apache.log4j.Logger;
import com.ls.tcpServer.constant.Constants;
import com.ls.tcpServer.message.Message;
import com.ls.tcpServer.message.MessageHandler;
import com.ls.tcpServer.spring.SpringInfoCenter;
/**
*
* @Title: ControllerHandler.java
* @Description: controller处理类
* @author liusong
* @date 2014-12-5 下午3:51:39
*/
public class ControllerHandler {
private static ControllerHandler instance;
private static final Logger logger = Logger.getLogger(ControllerHandler.class);
private static Executor executor;
static {
try {
executor = Executors.newFixedThreadPool(Constants.WORKING_THREADS_NUM);
start();
logger.info("controller处理中心启动成功!");
} catch (Exception e) {
logger.fatal("controller分发线程池启动异常,退出系统", e);
System.exit(0);
}
}
private ControllerHandler() {
};
public static ControllerHandler getInstance() {
if (instance == null) {
synchronized (ControllerHandler.class) {
if (instance == null) {
instance = new ControllerHandler();
}
}
}
return instance;
}
private static void start() {
Runnable r = new Runnable() {
public void run() {
while (true) {
try {
Message take = MessageHandler.MESSAGES.take();
executor.execute(new ControllerRunnable(take));
} catch (Exception e) {
logger.error(e.getMessage(),e);
}
}
}
};
new Thread(r).start();
}
}
/**
*
* @Title: ControllerHandler.java
* @Description: 调用controller处理消息
* @author liusong
* @date 2014-12-5 下午4:16:38
*/
class ControllerRunnable implements Runnable {
private static final Logger logger = Logger.getLogger(ControllerRunnable.class);
private Message message;
private static final Controllers CONTROLLERS = (Controllers) SpringInfoCenter.getInstance().getBeanByName(
"controllers");
public ControllerRunnable(Message message) {
super();
this.message = message;
}
public void run() {
try {
IController c = CONTROLLERS.getControllerMap().get(message.getMsg().get("cmd"));
c.handleMessage(message.getSession(), message.getMsg());
} catch (Exception e) {
logger.error(e.getMessage(),e);
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
自己写的基于netty的服务器端通讯框架
共22个文件
java:19个
xml:2个
properties:1个
5星 · 超过95%的资源 需积分: 50 107 下载量 47 浏览量
2014-12-08
11:27:22
上传
评论 3
收藏 20KB ZIP 举报
温馨提示
本人写的基于netty的服务器端通讯框架,报文格式为【int的长度+json格式的字符串】,json格式类似于{cmd:1,data:{}},通过cmd的表示识别controller,仅需在spring配置中配置controller即可,线程池大小和编码格式可在constants静态变量里配置。目前线程池为固定大小,以后的版本中可能会增加其他形式
资源推荐
资源详情
资源评论
收起资源包目录
tcpServer.zip (22个子文件)
tcpServer
pom.xml 1KB
src
test
java
com
ls
tcpServer
AppTest.java 1KB
TestClient.java 2KB
TestServer.java 452B
main
java
com
ls
tcpServer
decoder
ConcatDecoder.java 1KB
session
NettySession.java 2KB
SessionCenter.java 1KB
encoder
ConcatEncoder.java 1KB
controller
TestController.java 101B
Controllers.java 358B
IController.java 249B
impl
TestControllerImpl.java 610B
BaseController.java 452B
ControllerHandler.java 2KB
spring
SpringInfoCenter.java 1KB
constant
Constants.java 379B
TcpServer.java 2KB
message
MessageHandler.java 1KB
Message.java 747B
handler
TcpServerHandler.java 2KB
resource
log4j.properties 1KB
application.xml 1KB
共 22 条
- 1
lsongiu86
- 粉丝: 35
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页