`
WChao226
  • 浏览: 27628 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

mina HTTP协议实例

阅读更多
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
分享到:
评论

相关推荐

    Mina server client实例

    它的全名是"Minimalistic Application Network Architecture",其设计目标是简化网络服务的开发过程,支持多种协议如TCP/IP、UDP、HTTP等,并提供了Java NIO(非阻塞I/O)的基础架构。 在"Mina server client实例...

    Mina长连接短连接实例

    本文将深入探讨Mina框架中的长连接与短连接,并通过提供的Minaclient和MinaHost工程实例进行详细解析。 首先,我们需要了解什么是长连接和短连接。在TCP/IP通信中,短连接是指一次完整的通信过程(如HTTP请求)结束...

    Mina 实例 包含jar包

    Mina的核心设计思想是提供一个可扩展的框架,允许开发者创建各种类型的网络服务,如TCP/IP协议的应用(如HTTP、FTP)、UDP协议的应用以及自定义协议。它的核心组件包括IoSession,这是处理网络连接的核心对象,包含...

    mina实例1mina实例1

    MINA提供了异步I/O处理能力,适用于TCP和UDP协议,广泛应用于服务器端应用,如FTP、HTTP、NNTP、SNMP等网络服务。MINA的核心优势在于它的非阻塞I/O模型,这使得它在处理大量并发连接时表现出色。 MINA的核心组件...

    mina框架实例

    MINA的目标是帮助开发者更容易地创建网络服务,无论是基于协议如HTTP、FTP还是自定义的二进制或文本协议。 MINA的核心理念是将协议逻辑与I/O操作分离,通过提供一种抽象的、统一的API来处理网络通信。这种设计使得...

    mina服务器实例

    WebSocket允许服务器主动向浏览器发送数据,解决了HTTP协议的短连接限制,非常适合需要实时更新的场景。 四、Mina在Android Web中的集成 1. **Android客户端**:在Android应用中,可以使用Mina库实现与服务器的...

    mina2 实例程序(socket通讯调用远程方法)

    Apache Mina2是一个基于事件驱动和异步模型的网络应用框架,它为各种协议如TCP/IP、UDP/IP和HTTP等提供了一种统一的抽象层。Mina2通过高度封装的API,简化了网络编程的复杂性,使得开发者可以专注于业务逻辑,而无需...

    Apache Mina2服务器和客户端简单实例

    此外,Mina2还支持多种协议,如HTTP、FTP、SSL/TLS等,可以灵活地应用于各种网络通信场景。 通过这个简单的实例,我们可以看到Apache Mina2如何简化网络编程的复杂性,提供了一个高效、灵活的平台。对于开发人员来...

    Mina实现长连接和短连接实例

    在这个实例中,我们将探讨如何使用Mina实现长连接和短连接。 首先,理解长连接和短连接的概念至关重要。在TCP/IP通信中,短连接(Short Connection)是指一次数据传输完成后立即关闭连接,而长连接(Long ...

    Mina2.0 example HttpServer

    Mina2.0引入了许多优化和新特性,使其在处理HTTP协议方面表现出色。 HttpServer是Mina2.0中的一个重要组件,它允许我们构建自己的HTTP服务器。这个组件基于Mina的核心非阻塞I/O机制,可以处理大量的并发连接,提供...

    Java mina实例

    Java Mina是一个高性能、异步事件驱动的网络应用程序框架,主要用于简化开发服务器端和客户端的网络应用,如TCP和UDP套接字服务、HTTP服务等。Mina提供了一个与协议无关的API,允许开发者集中精力处理业务逻辑,而...

    mina-core网络应用框架实例

    Mina(Mini阿帕奇)是一个高性能、异步事件驱动的网络应用程序框架,主要用于构建服务器端的网络应用程序,如TCP和UDP通信、FTP、SMTP、HTTP等协议的服务器。它使得开发者可以专注于业务逻辑,而无需关心底层的网络...

    mina实例、资源包、学习文档

    看下官方网站(http://mina.apache.org/)对它的解释: Apache的Mina(Multipurpose Infrastructure Networked Applications)是一个网络应用框架,可以帮助用户开发高性能和高扩展性的网络应用程序;它提供了一个...

    mina权威性能测试例子

    2. **协议处理**:Mina支持多种网络协议,如TCP、UDP和SSL/TLS等,开发者可以根据需求选择合适的协议进行通信。在测试中,需要确保所选协议在高并发下仍能保持稳定性和效率。 3. **线程模型**:线程池配置对于性能...

    MINA开发手册和JAR包

    MINA的目标是简化网络编程,无论你是在处理TCP/IP协议如HTTP、FTP,还是UDP协议,或者是自定义的二进制协议,MINA都能提供统一的接口。 MINA的核心特性包括: 1. **非阻塞IO**:MINA基于NIO(Non-blocking I/O)...

    基于Apache Mina实现的TCP长连接和短连接实例

    1. **创建Mina服务端**:使用`ServerBootstrap`创建一个服务器实例,配置线程池、协议处理类(如`NioSocketAcceptor`)以及相应的事件处理器。 2. **定义协议处理类**:编写`IoHandler`实现类,处理`sessionCreated...

    Mina in Action preview

    4. **Protocol Buffers**:Mina支持多种协议,如HTTP、FTP、SMTP等,书中会介绍如何利用Mina构建自己的协议处理器。 5. **事件驱动编程**:了解Mina如何通过事件模型来处理网络事件,如连接建立、数据接收、连接...

    java mina组合包

    - Mina支持多种协议,如TCP/IP、UDP、HTTP、FTP等,可以通过自定义ProtocolHandler实现特定协议的解析和处理。 4. **多平台兼容性**: - 由于Java的跨平台特性,Mina可以在多种操作系统上运行,如Windows、Linux...

    Apache Mina帮助文档

    Mina主要应用于Java环境中,广泛用于TCP/IP协议栈(如TCP、UDP)和各种应用层协议(如HTTP、FTP、SMTP)的实现。 **1. 事件驱动模型** Apache Mina的核心是基于Java NIO(非阻塞I/O)的事件驱动模型。在这个模型中...

Global site tag (gtag.js) - Google Analytics