黑马程序员技术交流社区
标题:
使用Apache MINA框架搭建服务端
[打印本页]
作者:
yangcy
时间:
2014-7-10 13:11
标题:
使用Apache MINA框架搭建服务端
本帖最后由 yangcy 于 2014-7-10 13:14 编辑
使用MINA框架搭建服务端步骤:
1、定义一个启动服务的类MinaServer,并实现接口ServletContextListener
2、定义一个处理业务逻辑的类MinaServerHandler,并继承类IoHandlerAdapter
类MinaServer代码如下:
import java.net.InetSocketAddress;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;
import org.apache.mina.filter.executor.ExecutorFilter;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
import com.utils.LogUtil;
public class MinaServer implements ServletContextListener, HttpSessionListener {
private static NioSocketAcceptor acceptor;
private static final int port = 9999;
private static final LogUtil logUtil = LogUtil.getLogUtil(MinaServer.class);
// 停止MINA服务
public void contextDestroyed(ServletContextEvent sce) {
try {
MinaServer.acceptor.unbind();
MinaServer.acceptor.dispose();
logUtil.customLog("Mina服务停止...");
} catch (Exception e) {
logUtil.customLog(e);
}
}
// 启动MINA服务
public void contextInitialized(ServletContextEvent sce) {
try {
// 创建一个非阻塞的server端的Socket
acceptor = new NioSocketAcceptor();
// 设置过滤器
acceptor.getFilterChain().addLast(
"serverCodec",
new ProtocolCodecFilter(
new ObjectSerializationCodecFactory()));
acceptor.getFilterChain().addLast("ServerFilter",
new ExecutorFilter());
// 设置读取数据的缓冲区大小
acceptor.getSessionConfig().setReadBufferSize(1024*102400);
// 读写通道10秒内无操作进入空闲状态
acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);
// 添加逻辑处理器
acceptor.setHandler(new MinaServerHandler());
// 绑定端口
try {
acceptor.bind(new InetSocketAddress(port));
} catch (Exception e) {
}
logUtil.customLog("服务端启动成功... 端口号为:" + port);
} catch (Exception e) {
logUtil.customLog("服务端启动异常....");
}
}
public void sessionCreated(HttpSessionEvent arg0) {
}
public void sessionDestroyed(HttpSessionEvent arg0) {
}
}
复制代码
类MinaServerHandler代码如下:
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
import com.model.DeliverObject;
import com.model.Orders;
import com.model.Users;
import com.service.GoodsService;
import com.service.OrdersService;
import com.service.UserService;
import com.utils.GetBeanUtil;
import com.utils.LogUtil;
import com.utils.Params;
public class MinaServerHandler extends IoHandlerAdapter {
private static final LogUtil logUtil = LogUtil
.getLogUtil(MinaServerHandler.class);
@Override
public void sessionCreated(IoSession session) throws Exception {
logUtil.customLog("服务端与客户端创建连接...");
}
@Override
public void sessionOpened(IoSession session) throws Exception {
logUtil.customLog("服务端与客户端连接打开...");
}
@Override
public void messageReceived(IoSession session, Object message)
throws Exception {
DeliverObject recvObj = (DeliverObject) message;
int optionType = recvObj.getOptionType();
// 如果是登录操作
if (optionType == Params.LOGIN) {
UserService userService = (UserService) GetBeanUtil
.getBean("userService");
userService.doLogin(session, (Users) recvObj.getObj());
} else if (optionType == Params.REGISTER) {
// 如果是注册操作
UserService userService = (UserService) GetBeanUtil
.getBean("userService");
userService.doRegister(session, (Users) recvObj.getObj());
} else if (optionType == Params.UPDATEUSER) {
// 如果是修改用户信息操作
UserService userService = (UserService) GetBeanUtil
.getBean("userService");
userService.doUpdateUser(session, (Users) recvObj.getObj());
} else if (optionType == Params.SEARCHGOODS) {
// 如果是搜索商品操作
GoodsService goodsService = (GoodsService) GetBeanUtil
.getBean("goodsService");
goodsService.doSearchGoods(session, (String) recvObj.getObj());
} else if (optionType == Params.SUBMITORDERS) {
// 如果是提交订单操作
OrdersService ordersService = (OrdersService) GetBeanUtil
.getBean("ordersService");
ordersService.doSubmitOrders(session, (Orders) recvObj.getObj());
} else if (optionType == Params.SEARCHALLORDERS) {
// 如果是查询所有订单操作
OrdersService ordersService = (OrdersService) GetBeanUtil
.getBean("ordersService");
ordersService.doSearchAllOrders(session, (Users) recvObj.getObj());
}
}
@Override
public void messageSent(IoSession session, Object message) throws Exception {
logUtil.customLog("服务端发送信息成功...");
}
@Override
public void sessionClosed(IoSession session) throws Exception {
logUtil.customLog("服务端与客户端连接关闭...");
session.close(true);
}
@Override
public void sessionIdle(IoSession session, IdleStatus status)
throws Exception {
super.sessionIdle(session, status);
logUtil.customLog("服务端进入空闲状态...");
}
@Override
public void exceptionCaught(IoSession session, Throwable cause)
throws Exception {
logUtil.customLog("服务端发送异常..." + cause);
session.close(true);
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2