mina android的通訊封裝

由于公司最近做即時(shí)通訊,目前做選型方案有netty和mina,該demo是基于mina(版本2.0.13)的android端簡(jiǎn)單封裝,發(fā)送消息,接收消息,心跳設(shè)置,編碼處理等 代碼源碼在github上https://github.com/mygzk/MinaDemo.git demo里面有相應(yīng)的server簡(jiǎn)單代碼.
NettyDemo可看
歡迎拍磚留言

連接參數(shù)設(shè)置

   MinaConfig.Builder builder = new MinaConfig.Builder()
                .setIp(Constant.MINA_HOST)
                .setConnectionTimeout(10000)
                .setReadBuilder(10240)
                .setPort(Constant.MINA_PORT)
                .setConnectLisenter(new ConnectLisenter() {
                    @Override
                    public void connFail() {
                        Log.e("mina", "server connect fail");
                        //Toast.makeText(MainActivity.this, "server connect fail", Toast.LENGTH_SHORT).show();
                    }

                    @Override
                    public void connSucc() {
                        Log.e("mina", "server connect succ");
                        //Toast.makeText(MainActivity.this, "server connect succ", Toast.LENGTH_SHORT).show();
                    }

                    @Override
                    public void connDis() {
                        Log.e("mina", "server connect disconnect");
                        //Toast.makeText(MainActivity.this, "server connect disconnect", Toast.LENGTH_SHORT).show();
                    }
                });


        MinaClientManager.getManagerInstance().initConfig(builder.builder());
        MinaClientManager.getManagerInstance().connect();

接收發(fā)送消息

發(fā)送消息

 public synchronized void send(String msg) {
        if (mIsConnect && mSession != null && mSession.isConnected()) {
            mSession.write(msg);
        } else {
            EventBus.getDefault().post(new MinaReciveFailEvent("send msg fail。server may be not connected... "));
        }
    }

接收消息在

    @Override
    public void messageReceived(IoSession session, Object message) throws Exception {
        String str = (String)message;
        Log.e(TAG, "前臺(tái)收到消息如下:" + message);
        RecordBean recordBean= GsonUtil.fromJson(str, RecordBean.class);
        EventBus.getDefault().post(recordBean);
    }

心跳設(shè)置

private KeepAliveFilter getKeep() {
        KeepAliveMessageFactory heartBeatFactory = new KeepAliveMessageFactoryImpl();
        KeepAliveFilter heartBeat = new KeepAliveFilter(heartBeatFactory,
                IdleStatus.BOTH_IDLE, new KeepAliveRequestTimeoutHandlerImpl());
        //設(shè)置是否forward到下一個(gè)filter 回復(fù)
        heartBeat.setForwardEvent(true);
        //設(shè)置心跳頻率
        heartBeat.setRequestInterval(4);
        return heartBeat;
    }

     ...
     ...
 mConnection.getFilterChain().addLast("heartbeat", getKeep());

編碼設(shè)置

demo中用到到TextLineCodecFactory 解碼器編碼器 這個(gè)是以換行符號(hào)區(qū)分一條消息 可設(shè)置消息大小

TextLineCodecFactory textLineCodecFactory=   new TextLineCodecFactory(Charset.forName("UTF-8"));
        textLineCodecFactory.setDecoderMaxLineLength(1024*1024);
        textLineCodecFactory.setEncoderMaxLineLength(1024*1024);
        mConnection.getFilterChain().addLast("codec",
                new ProtocolCodecFilter(textLineCodecFactory));

效果如下:


device-2018-06-29-162040.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容