zoukankan      html  css  js  c++  java
  • MirrorNetwork 基于jmdns和netty的android网络通信开源库

    目前android很多开源的网络通信库大多是基于http, 像Volley, android-async-http等等,在WAN上的网络通信是个不错的解决方案,而对于在局域网内的通信场景,上面基于http的网络通信仍然有效,但是并非所有的服务端都采用http服务,MirrorNetwork正是在这个需求下产生,它基于jmdns来实现服务自动发现,零网络配置,基于netty来实现android设备间的网络通信。

                  

    (1) 消息模型MirrorMessage
     
    MirrorNetwork定义了一种消息模型MirrorMessage,它包含三个重要成员:
     
    MIRROR_APPTYPE appType:消息承载的应用类型,使得MirrorNetwork收到该消息后,可以判断将该消息分发给哪个应用上层的消息监听对象(该类实现IMirrorMsgListener)。
     
    String peerAddress:server使用,MirrorNetwork支持多个client同时连接一个server, server发送消息给其中一个client,需要指定该client的地址
     
    Object content:消息承载的应用层需要的真正内容,应用层可以根据业务自定义content类,仅需要该类实现Serializable。
     
    (2) 消息通信实体
    MirrorNetwork定义了一个接口类INetworkConnection,通过这个接口类,我们可以自定义各种不同的具体通信实体,MirrorNetwork基于netty定义了两个通信实体类NettyClient和NettyServer,这两个类实现了INetworkConnection接口。
    public interface INetworkConnection {
     /**
      *
     * @Title: start  
     * @Description: cli/svr endpoint connects into network(connect/bind)
     * void
     * @throws
      */
     public void start();
     
     /**
      *
     * @Title: send  
     * @Description: send msg to peer, notice:
     * for supporting cli:svr=*:1
     * if svr sends msg to cli, mirrormessage req must set peerAddress.
     * if cli sends msg to svr, peerAddress not need set.
     * @param req
     * @return
     * MIRROR_TRANSFSTATUS
     * @throws
      */
     public MIRROR_NETSTATUS send(MirrorMessage req);
     
     /**
      *
     * @Title: stop  
     * @Description: just close network connection, you can start again for connecting again
     * recommend using stop for simple.
     * void
     * @throws
      */
     public void stop();
     
     /**
      *
     * @Title: close  
     * @Description: close network connection and release all resources.
     * void
     * @throws
      */
     public void close();
     
     /**
      *
     * @Title: setMirrorMsgListener  
     * @Description: set msglistener for recving msg from peers,
     * you are allowed registering listener once for each appType.
     * @param appType
     * @param li
     * @return
     * boolean
     * @throws
      */
     public boolean setMirrorMsgListener(MIRROR_APPTYPE appType, IMirrorMsgListener li);
     
     /**
      *
     * @Title: isClosed  
     * @Description: check if network connection was closed.
     * @return
     * boolean
     * @throws
      */
     public boolean isClosed();
    }

    通信实体(nettyclient, nettyserver)通过setMirrorMsgListener方法为每种业务层(指定MIRROR_APPTYPE)设置监听对象,用来实现异步通信,接收对端消息。

     
    MirrorNetwork的实现代码和使用指南,请访问https://github.com/europelee/MirrorNetwork
  • 相关阅读:
    PHP的来龙去脉
    最近动态
    motorola usb driver下载
    C#泛型学习笔记
    Visual Studio 2008 SP1 (Beta)
    【Linux操作系统分析】计算机是怎样工作的
    细嚼慢咽C++primer(1)——指针,void*型指针,const限定符(2)
    初识Hadoop(1)
    2013.05.14_C++primer笔记
    初始Hadoop(3)
  • 原文地址:https://www.cnblogs.com/europelee/p/5186973.html
Copyright © 2011-2022 走看看