`
xyz_lmn
  • 浏览: 65403 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

push研究——Apache Mina探索初步

 
阅读更多

虽然google为Android开发者提供了GCM实现push,但是因为需要系统安装了google play、google帐号、系统>2.2、google push服务器在国外等多种原因,在中国,Android上想实现push还需要自己努力。

当前最火的开源push是基于xmpp协议的androidpn。androidpn是基于Mina框架的,所以这里从Mina框架开始入手。看mina官网的说明:

Server

下面通过简单的例子来学习mina的使用。首先创建服务端,工程正使用了3个jar包


看代码:

public class HelloMina {
	private static final int PORT = 9125;
	  /**
	   * @param args
	   * @throws IOException 
	   */
	  public static void main(String[] args) throws IOException {
		  //创建一个非阻塞的server端Socket ,用NIO
		  IoAcceptor acceptor = new  NioSocketAcceptor();  
	      acceptor.getFilterChain().addLast( "logger", new LoggingFilter() );
	      acceptor.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" ))));
	      // 设定服务器端的消息处理器
	      acceptor.setHandler(  new MinaServerHandler() );	    
	      acceptor.getSessionConfig().setReadBufferSize( 2048 );
	      acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE, 10 );
	      // 服务器端绑定的端口  启动服务
	      acceptor.bind( new InetSocketAddress(PORT) );
	          
	  	}
}
HelloMina的处理器:

/**
 * HelloMina的处理逻辑
 * @author zhangxy
 */
class MinaServerHandler extends IoHandlerAdapter {
	 @Override
	    public void exceptionCaught( IoSession session, Throwable cause ) throws Exception{
	        cause.printStackTrace();
	        session.close();
	    }

	    @Override
	    public void messageReceived( IoSession session, Object message ) throws Exception
	    {
	        String str = message.toString();
	        if( str.trim().equalsIgnoreCase("quit") ) {
	            session.close();
	            return;
	        }
	        System.err.println("收到客户端发来的消息::"+str);  
	        StringBuilder buf = new StringBuilder(str.length());  
	        for (int i = str.length() - 1; i >= 0; i--) {  
	            buf.append(str.charAt(i));  
	        }  
	  
	        // and write it back.  
	        session.write(buf.toString()); 
	    }

	    @Override
	    public void sessionIdle( IoSession session, IdleStatus status ) throws Exception{
	        System.out.println( "IDLE " + session.getIdleCount( status ));
	    }

		@Override
		public void messageSent(IoSession session, Object message)
				throws Exception {
			// TODO Auto-generated method stub
			super.messageSent(session, message);
			
		}

		@Override
		public void sessionClosed(IoSession session) throws Exception {
			// TODO Auto-generated method stub
			super.sessionClosed(session);
			 System.out.println( "session closed");
		}

		@Override
		public void sessionCreated(IoSession session) throws Exception {
			// TODO Auto-generated method stub
			super.sessionCreated(session);
			 System.out.println( "session create");
		}

		@Override
		public void sessionOpened(IoSession session) throws Exception {
			// TODO Auto-generated method stub
			super.sessionOpened(session);
			 System.out.println( "session opened");
		}
	    
}

client

下面是Client代码,Client没有使用NIO,使用的普通socket实现:

public class HelloMinaClient {
    private Socket socket;  
    private DataOutputStream out;  
    private DataInputStream in;  
    public HelloMinaClient() throws IOException {  
    }  
  
    /** 
     * @param args 
     */  
    public static void main(String[] args) throws Exception {  
        // TODO Auto-generated method stub  
    	HelloMinaClient minaClient = new HelloMinaClient();  
    	minaClient.minaClient();  
    }  
  
    /** 
     *   发送消息 
     * @param out 
     */  
    public void sendMessage(Socket s) {  
        try {  
             out = new DataOutputStream(s.getOutputStream());   
            out.writeBytes("mina\n");  
        } catch (IOException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
  
    }  
      
    public void receiveMessage(Socket s) {  
        try {  
             in = new DataInputStream(s.getInputStream());  
             System.err.println("收到服务端发来的消息::"+in.readLine());  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
  
    public void minaClient() throws Exception {  
        while (true) {  
            try {  
            	socket = new Socket("192.168.21.121", 9124);  
                sendMessage(socket);  
                receiveMessage(socket);  
                out.close();  
                in.close();  
                Thread.sleep(5000);  
            } catch (InterruptedException e) {  
                // TODO Auto-generated catch block  
                e.printStackTrace();  
            } catch(Exception e){  
                e.printStackTrace();  
            }finally {  
                 try{  
                   if(socket!=null)socket.close();  //断开连接  
                 }catch (IOException e) {e.printStackTrace();}  
              }  
        }  
    }  

}

SOCKET作为短连接,即收发消息后SOCKET断开一次,线程过5秒又建立连接收发消息。


/**
* @author 张兴业
* 邮箱:xy-zhang#163.com
* android开发进阶群:278401545
*http://blog.csdn.net/xyz_lmn
*/




分享到:
评论

相关推荐

    Apache Mina Server 2.0中文参考手册V1.0,Apache Mina2.0学习笔记(修订版)

    Apache Mina Server 2.0中文参考手册V1.0,Apache Mina2.0学习笔记(修订版)Apache Mina Server 2.0中文参考手册V1.0,Apache Mina2.0学习笔记(修订版)

    apache-mina-2.0.4.rar_apache mina_mina

    在深入研究Apache Mina的源码之前,了解其核心组件是必要的: 1. **Filter Chain**:Mina的核心设计模式之一是过滤器链。每个连接都有一系列过滤器,它们按照顺序处理入站和出站事件。过滤器可以实现特定功能,如...

    关于apache Mina Server

    深入理解Apache_Mina_(1)----_Mina的几个类 深入理解Apache_Mina_(2)----_与IoFilter相关的几个类 深入理解Apache_Mina_(3)----_与IoHandler相关的几个类 深入理解Apache_Mina_(4)----_IoFilter和IoHandler的区别和...

    apache Mina的完整学习资料

    Apache Mina是一个开源框架,主要用于构建高性能、高可用性的网络应用程序。这个压缩包包含了全面的学习资料,适合初学者深入理解Mina的原理和使用方法。其中,中文参考手册的加入使得学习过程更加友好,便于非英语...

    apache mina 学习笔记三(子项目FtpServer)

    在本学习笔记中,我们将专注于MINA的子项目——FtpServer,它是实现FTP服务器功能的一个模块。 FTP(File Transfer Protocol)是一种广泛使用的互联网协议,用于在不同主机之间传输文件。Apache MINA FtpServer提供...

    Apache Mina帮助文档

    Apache Mina是一个高度可扩展的网络通信框架,主要用于构建高性能、高效率的服务端应用程序。它提供了事件驱动、异步I/O处理模型,使得开发者能够更专注于业务逻辑,而不是底层网络编程的复杂性。Mina主要应用于Java...

    apache mina实例免费下载

    Apache MINA(Multipurpose Infrastructure for Network Applications)是一个开源框架,主要设计用于简化网络应用程序的开发,尤其是基于TCP和UDP协议的应用。它提供了高度可扩展和高性能的非阻塞I/O模型,使得...

    Apache Mina 入门Demo

    Apache Mina是一个开源项目,主要用于构建高性能、高可用性的网络通信应用。它是Java语言开发的,提供了一套简单而强大的API,使得开发者可以方便地创建网络服务器和客户端应用程序。Mina的目标是简化网络编程,使其...

    Apache MINA 2.0 用户指南( 缺第一章节)

    ### Apache MINA 2.0 用户指南:基础知识 #### 基础概念介绍 Apache MINA 2.0 是一款高性能且易于使用的网络应用程序框架,它简化了开发人员在网络编程方面的负担,允许开发者专注于应用程序的核心功能,而不是底层...

    Apache mina2学习笔记DEMO

    Apache MINA(Multipurpose Infrastructure for Network Applications)是一个Java框架,专为高性能、异步网络应用程序设计。MINA 提供了一套高级的网络通信抽象层,简化了开发过程,特别是对于处理TCP/IP和UDP/IP...

    Apache Mina核心jar包:mina-core-2.0.7

    Apache MINA是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。 当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序开发、串口通讯程序(只在最新的预览版...

    Apache MINA框架相关资料

    Apache MINA(Multipurpose Infrastructure for Network Applications)是一个高性能、异步事件驱动的网络应用程序框架,主要用于简化开发高质量的网络服务。这个框架适用于多种协议,如TCP/IP和UDP/IP,以及NIO(非...

    一个Apache MINA使用案例源代码ApacheMina

    Apache MINA是一个高性能、异步事件驱动的网络应用程序框架,主要设计用于简化开发服务器端的高性能网络应用。这个框架提供了一种抽象层,允许开发者使用相同的API处理多种不同的传输协议,如TCP/IP、UDP/IP以及SSL/...

    Apache Mina Server 2.0 抢鲜体验

    Apache Mina Server 2.0 是一款高性能、可扩展的网络通信框架,广泛应用于开发网络应用服务器,如TCP/IP和UDP服务。这个框架允许开发者用Java编写高效的网络应用程序,简化了网络编程的复杂性。Mina 2.0 版本在前一...

    apache mina-spring 服务端程序

    Apache Mina是一个高度可扩展的网络通信框架,主要用于构建高性能、高并发的网络应用程序,如服务器端应用。它提供了一种简单而强大的编程模型,使得开发者可以专注于业务逻辑,而不是底层的网络通信细节。Spring...

    Apache MINA 线程模型配置

    ### Apache MINA线程模型配置详解 #### 一、线程模型配置介绍 Apache MINA 是一个用于构建网络应用程序的高性能、高可靠性的框架。它提供了丰富的功能来简化网络编程,包括TCP/IP 和 UDP/IP 协议的支持。线程模型...

    Apache MINA2实用手册

    Apache MINA2实用手册 Apache MINA2实用手册

    Apache-Mina-2.rar_apache mina_java mina_mina_mina-core-1.1.3

    Apache Mina是一个强大的开源项目,专门设计用于构建网络应用程序。这个框架的核心目标是提供一个抽象层,使得开发者能够专注于业务逻辑,而不是底层网络通信的复杂性。标题中的"Apache-Mina-2.rar"和"mina-mina-...

Global site tag (gtag.js) - Google Analytics