minaHTTP请求实例
有的时候我们需要高性能的响应服务,而传统的webService方式,tomcat_Web服务器不能满足我们的要求时,mina是一个很好的选择(netty也很不错),正是因其快速的处理能力,备受游戏开发者的喜爱、有高性能要求的接口开发者喜爱, 本文给出一个mina的HTTP服务实例,编码解码都已写好,可直接测试。
只给出了以部分代码,详细代码请在附件中下载
------------------------------------------------------
测试方法.
启动HttpServer.java服务端
浏览器中输入:
//http://127.0.0.1:8882/execute.do?method=hello&user=eric&pwd=123321&age=23
//服务端输出结果:
2015-09-29 22:34:38 sessionCreated...2015-09-29 10:34:38
2015-09-29 22:34:38 sessionOpened...2015-09-29 10:34:38
context...execute.do
method====hello
user====eric
pwd====123321
age====23
user parameters====1----eric
2015-09-29 22:34:38 sessionClosed...2015-09-29 10:34:38
2015-09-29 22:34:38 messageSent...2015-09-29 10:34:38
//浏览器上显示的响应内容:
wangc response Test测试测试aaa
服务器端(HttpServer.java):
package com.server;
import java.io.IOException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.util.concurrent.Executors;
import org.apache.log4j.Logger;
import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.executor.ExecutorFilter;
import org.apache.mina.filter.firewall.BlacklistFilter;
import org.apache.mina.filter.logging.LogLevel;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.SocketSessionConfig;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
import com.GlobalParam;
import com.myProtocols.HttpServerProtocolCodecFactory;
/**
*
* @author wangchao
* @Version 1.0
* @date 2015-9-30 上午9:40:37
*/
public class HttpServer {
// private static final Logger logger = LoggerFactory.getLogger(TcpServer.class);
private static final Logger logger = Logger.getLogger(HttpServer.class);
/**
* 初始化服 整行传输--new TextLineCodecFactory(Charset.forName( "UTF-8" ))
* @throws IOException
*/
public static void initialize() throws IOException {
// Create an Acceptor
NioSocketAcceptor acceptor = new NioSocketAcceptor();
// Add Handler
acceptor.setHandler(new HttpServerHandler());
//过滤器链
DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
//日志
LoggingFilter loggingFilter = new LoggingFilter();
loggingFilter.setSessionClosedLogLevel(LogLevel.NONE);
loggingFilter.setSessionCreatedLogLevel(LogLevel.DEBUG);
loggingFilter.setSessionOpenedLogLevel(LogLevel.INFO);
loggingFilter.setExceptionCaughtLogLevel(LogLevel.ERROR);
chain.addLast("logging", loggingFilter);
//黑名单
InetAddress[] addressArr = new InetAddress[]{};
BlacklistFilter blackList = new BlacklistFilter();
blackList.setBlacklist(addressArr);
chain.addLast("blackList", blackList);
//编码解码过滤 --http请求
chain.addLast("codec",new ProtocolCodecFilter(new HttpServerProtocolCodecFactory()));
// chain.addLast("http.ds",new HttpServerCodec());
// chain.addLast("codec",new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName( "UTF-8" ))));
//线程池
chain.addLast("threadPool",new ExecutorFilter(Executors.newCachedThreadPool()));
//session配置
SocketSessionConfig cfg = acceptor.getSessionConfig();
cfg.setReuseAddress(true);//设置复用地址
cfg.setReadBufferSize(GlobalParam.READ_BUFFER_SIZE);//
cfg.setSendBufferSize(GlobalParam.SEND_BUFFER_SIZE);//
cfg.setReceiveBufferSize(GlobalParam.RECEIVE_BUFFER_SIZE);//
// cfg.setIdleTime(IdleStatus.BOTH_IDLE, 2);
logger.info("Starting Server.... and then Listening on:"+GlobalParam.HTTP_SERVER_PORT);
//Bind地址
acceptor.bind(new InetSocketAddress(GlobalParam.HTTP_SERVER_PORT));
logger.info("Server listening on "+GlobalParam.HTTP_SERVER_PORT);
}
public static void main(String[] args) {
try {
initialize();
} catch (IOException e) {
logger.error("start Server is throw Exception ",e);
}
}
}
服务端Handler(HttpServerHandler.java):
package com.server;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.log4j.Logger;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.example.tcp.perf.TcpServer;
import com.AbstractHandler;
import com.myProtocols.HttpRequestMessage;
import com.myProtocols.HttpResponseMessage;
/**
*
* @author wangchao
* @Version 1.0
* @date 2015-9-30 上午9:39:03
*/
public class HttpServerHandler extends AbstractHandler{
private static final Logger logger = Logger.getLogger(TcpServer.class);
@Override
public void exceptionCaught(IoSession session, Throwable e)
throws Exception {
logger.debug(e.getMessage(),e);
// e.printStackTrace();
}
@Override
public void messageReceived(IoSession session, Object msg) throws Exception {
HttpRequestMessage reqM = (HttpRequestMessage)msg;
System.out.println("context..."+reqM.getContext());
System.out.println("user===="+reqM.getParameter("user"));
System.out.println("pwd===="+reqM.getParameter("pwd"));
System.out.println("age===="+reqM.getParameter("age"));
String[] users = reqM.getParameters("user");
System.out.println("user parameters===="+users.length+"----"+users[0]);
HttpResponseMessage respM = new HttpResponseMessage();
respM.setContentType("text/html; charset=UTF-8");
respM.appendBody("wangc response Test测试测试aaa");
session.write(respM);
// session.write("ffffffffffffffffffff");
session.close(false);
}
@Override
public void messageSent(IoSession arg0, Object arg1) throws Exception {
// TODO Auto-generated method stub
logger.info("messageSent..."+getCurrentDate());
}
@Override
public void sessionClosed(IoSession arg0) throws Exception {
// TODO Auto-generated method stub
logger.info("sessionClosed..."+getCurrentDate());
}
@Override
public void sessionCreated(IoSession arg0) throws Exception {
// TODO Auto-generated method stub
// System.out.println("sessionCreated...");
logger.info("sessionCreated..."+getCurrentDate());
}
@Override
public void sessionIdle(IoSession session, IdleStatus arg1) throws Exception {
// TODO Auto-generated method stub
session.write("idle--"+getCurrentDate());
// logger.info("sessionIdle "+CommonsUtils.getCurrentDate());
}
@Override
public void sessionOpened(IoSession arg0) throws Exception {
// TODO Auto-generated method stub
logger.info("sessionOpened..."+getCurrentDate());
}
private static String getCurrentDate(){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
return sdf.format(new Date());
}
}
- 大小: 14.4 KB
分享到:
相关推荐
它的全名是"Minimalistic Application Network Architecture",其设计目标是简化网络服务的开发过程,支持多种协议如TCP/IP、UDP、HTTP等,并提供了Java NIO(非阻塞I/O)的基础架构。 在"Mina server client实例...
本文将深入探讨Mina框架中的长连接与短连接,并通过提供的Minaclient和MinaHost工程实例进行详细解析。 首先,我们需要了解什么是长连接和短连接。在TCP/IP通信中,短连接是指一次完整的通信过程(如HTTP请求)结束...
Mina的核心设计思想是提供一个可扩展的框架,允许开发者创建各种类型的网络服务,如TCP/IP协议的应用(如HTTP、FTP)、UDP协议的应用以及自定义协议。它的核心组件包括IoSession,这是处理网络连接的核心对象,包含...
MINA的目标是帮助开发者更容易地创建网络服务,无论是基于协议如HTTP、FTP还是自定义的二进制或文本协议。 MINA的核心理念是将协议逻辑与I/O操作分离,通过提供一种抽象的、统一的API来处理网络通信。这种设计使得...
WebSocket允许服务器主动向浏览器发送数据,解决了HTTP协议的短连接限制,非常适合需要实时更新的场景。 四、Mina在Android Web中的集成 1. **Android客户端**:在Android应用中,可以使用Mina库实现与服务器的...
Apache Mina2是一个基于事件驱动和异步模型的网络应用框架,它为各种协议如TCP/IP、UDP/IP和HTTP等提供了一种统一的抽象层。Mina2通过高度封装的API,简化了网络编程的复杂性,使得开发者可以专注于业务逻辑,而无需...
在这个实例中,我们将探讨如何使用Mina实现长连接和短连接。 首先,理解长连接和短连接的概念至关重要。在TCP/IP通信中,短连接(Short Connection)是指一次数据传输完成后立即关闭连接,而长连接(Long ...
此外,Mina2还支持多种协议,如HTTP、FTP、SSL/TLS等,可以灵活地应用于各种网络通信场景。 通过这个简单的实例,我们可以看到Apache Mina2如何简化网络编程的复杂性,提供了一个高效、灵活的平台。对于开发人员来...
Mina2.0引入了许多优化和新特性,使其在处理HTTP协议方面表现出色。 HttpServer是Mina2.0中的一个重要组件,它允许我们构建自己的HTTP服务器。这个组件基于Mina的核心非阻塞I/O机制,可以处理大量的并发连接,提供...
Java Mina是一个高性能、异步事件驱动的网络应用程序框架,主要用于简化开发服务器端和客户端的网络应用,如TCP和UDP套接字服务、HTTP服务等。Mina提供了一个与协议无关的API,允许开发者集中精力处理业务逻辑,而...
Mina(Mini阿帕奇)是一个高性能、异步事件驱动的网络应用程序框架,主要用于构建服务器端的网络应用程序,如TCP和UDP通信、FTP、SMTP、HTTP等协议的服务器。它使得开发者可以专注于业务逻辑,而无需关心底层的网络...
看下官方网站(http://mina.apache.org/)对它的解释: Apache的Mina(Multipurpose Infrastructure Networked Applications)是一个网络应用框架,可以帮助用户开发高性能和高扩展性的网络应用程序;它提供了一个...
MINA的目标是简化网络编程,无论你是在处理TCP/IP协议如HTTP、FTP,还是UDP协议,或者是自定义的二进制协议,MINA都能提供统一的接口。 MINA的核心特性包括: 1. **非阻塞IO**:MINA基于NIO(Non-blocking I/O)...
1. **创建Mina服务端**:使用`ServerBootstrap`创建一个服务器实例,配置线程池、协议处理类(如`NioSocketAcceptor`)以及相应的事件处理器。 2. **定义协议处理类**:编写`IoHandler`实现类,处理`sessionCreated...
4. **Protocol Buffers**:Mina支持多种协议,如HTTP、FTP、SMTP等,书中会介绍如何利用Mina构建自己的协议处理器。 5. **事件驱动编程**:了解Mina如何通过事件模型来处理网络事件,如连接建立、数据接收、连接...
- Mina支持多种协议,如TCP/IP、UDP、HTTP、FTP等,可以通过自定义ProtocolHandler实现特定协议的解析和处理。 4. **多平台兼容性**: - 由于Java的跨平台特性,Mina可以在多种操作系统上运行,如Windows、Linux...
Mina主要应用于Java环境中,广泛用于TCP/IP协议栈(如TCP、UDP)和各种应用层协议(如HTTP、FTP、SMTP)的实现。 **1. 事件驱动模型** Apache Mina的核心是基于Java NIO(非阻塞I/O)的事件驱动模型。在这个模型中...
MINA提供了异步的、事件驱动的网络通信API,简化了处理TCP/IP和UDP/IP协议栈的工作。在这个场景中,我们将讨论如何使用MINA来实现一个简单的登录功能。 首先,理解MINA的基本工作原理至关重要。MINA的核心是...
MINA提供了异步I/O处理能力,适用于TCP和UDP协议,广泛应用于服务器端应用,如FTP、HTTP、NNTP、SNMP等网络服务。MINA的核心优势在于它的非阻塞I/O模型,这使得它在处理大量并发连接时表现出色。 MINA的核心组件...