由于公司最近做即時(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