java mina 长连接_长连接神器Mina框架的使用

前段时间学习了mina框架的使用。它是基于Socket进行通信,所以说在项目中要是需要长连接的使用,那mina框架是一个不错的选择。

下面简单介绍一下mina框架的使用,学习mina框架不长时间,现在写下来即时为了记录一下自己的学习经历,又希望可以帮助其他初学者朋友,若有不足与错误之处,还请大神指教。

在使用mina框架之前需要下载所需的jar包。可以在我的网盘中下载,Android端也可以用的。地址:http://pan.baidu.com/s/1skP8YT3 ,提取码:inyl。

所需的jar包有:1、log4j-1.2.17.jar  2、mina-core-2.0.0.jar  3、slf4j-api-1.5.11.jar  4、slf4j-simple-1.5.2.jar

服务器端导入这四个jar包,Android端不用导入log4j-1.2.17.jar,它是用来打印log日志,Android端就不需要加入了。

Android端需要添加网络访问权限:

服务器端:

1、添加服务器端监听:

//入口函数

public static void main(String[] args) {

//创建一个NioSocketAcceptor

NioSocketAcceptor acceptor = new NioSocketAcceptor();

//添加过滤

acceptor.getFilterChain().addLast("LineCodec",

new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));

//设置Handler,这个handler使我们自己定义的类,需要继承IoHandlerAdapter

acceptor.setHandler(new MinaServerHandler());

try {

//绑定端口

acceptor.bind(new InetSocketAddress(9999));

} catch (IOException e) {

e.printStackTrace();

}

}

2、创建MinaServerHandler类:    public class MinaServerHandler extends IoHandlerAdapter {

private static List sessions = new ArrayList<>();

//当客户端与服务器端简历连接后会调用sessionCreated,session相当于一个客户端连接实例,在这里我们可以保存这个实例

@Override

public void sessionCreated(IoSession session) throws Exception {

super.sessionCreated(session);

//保存session实例

sessions.add(session);

}

//当客户端与服务器断开连接是会调用这个方法,在这里我们可以移除已断开连接的Session

@Override

public void sessionClosed(IoSession session) throws Exception {

super.sessionClosed(session);

//移除Session实例

sessions.remove(session);

}

/*当客户端向服务器发送了消息以后,会调用这个方法,message为数据内容

在这里我们可以对数据进行接收我们可以

*/

@Override

public void messageReceived(IoSession session, Object message) throws Exception {

super.messageReceived(session, message);

//我们可以实时的将消息发送到其他客户端

for(IoSession is : sessions){

if(!is.equals(session)){

is.write(message);

}

}

//当处理逻辑较多时,如果我们使用json来传送数据,可以在json中加一个code字段来表示这条消息的类型,并写一个JsonUtil来进行获取类型等操作

String json = message.toString();

int code = JsonUtil.getCode(json);

switch(code){

case 1:

//根据json数据做处理

break;

case 2:

//更加json数据做处理

break;

}

}

}

}

Android客户端:

1、创建NetConnector用于与服务器建立连接

public class NetConnector {

private static IoSession instance = null;

private static IoConnector connector = null;

//获取Session

public static IoSession getSession(){

if(instance == null){

synchronized(NetConnector.class){

if(instance == null){

instance = createSession();

}

}

}

return instance;

}

//获取IoSession

private static IoSession createSession() {

L.i("客户端连接开始!");

connector = new NioSocketConnector();

//设置链接超时时间

connector.setConnectTimeoutMillis(30000);

//添加过滤器

connector.getFilterChain().addLast("LineCodec",

new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));

minaClientHandler = new MinaClientHandler();

//设置Handler,MinaClientHandler为自己创建的类,继承自IoHandlerAdapter

connector.setHandler(minaClientHandler);

ConnectFuture future = connector.connect(new InetSocketAddress("192.168.191.194", 9999));//创建链接,指定Ip地址与端口号

future.awaitUninterruptibly();// 等待连接创建完成

instance = future.getSession();//获得session实例

return instance;

}

public static closeConnector(){

if(instance != null){

session.getCloseFuture().awaitUninterruptibly(); //等待关闭连接

}

if(connector != null){

connector.dispose();

}

}

}

2、创建MinaClientHandler类MinaClientHandler类与服务器端的MinaServerHandler类都是继承自IoHandlerAdapter。在客户端中主要是重写MessageReceived方法用来接收服务器端的消息,我们也可以用为Json字符串添加Code字段来进行消息类型的解析。由于方法是一样的,在这里就省略了。3、向服务器端发送消息我们通过NetConnector的getInstance()方法得到一个IoSession实例,得到这个实例后,也就与服务器建立了连接,这时我们就可以通过IoSession的write(object)方法想服务器发送消息了。

4、关闭连接

如果现在不需要使用连接,记得关闭哦。 NetConnector.closeConnector();在这里mina框架的大概用法就介绍完了,这只是我目前理解并且使用的方法,后边需要对mina框架做进一步的学习,希望这里可以对初学者有一些帮助,如果有错误的地方,还请联系我,做进一步的改正,在这里先谢过各位大神。qq:1362616851

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值