MINA经典入门例子----Time Server

手撕代码系列:Conv2D 在实际的神经网络中,每个卷积核都会对应一个偏置值。这意味着如果网络有多个卷积核,每个卷积核的输出都可以加上对应的偏置。 阅读详情

 貌似java的IO、NIO的入门例子都有相关的Time Server Demo。本例为MINA官方Demo翻译过来而已。

  MINA百科:

   Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便

     

apache mina

利的框架。当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序开发、串口通讯程序(只在最新的预览版中提供),MINA 所支持的功能也在进一步的扩展中。

  目前正在使用 MINA 的软件包括有:Apache Directory Project、AsyncWeb、AMQP(Advanced Message Queuing Protocol)、RED5 Server(Macromedia Flash Media RTMP)、ObjectRADIUS、Openfire 等等。

      目前最新版本为2.02 Release,官方网站为:http://mina.apache.org/

      MINA框架的特点有:基于java NIO类库开发;采用非阻塞方式的异步传输;事件驱动;支持批量数据传输;支持TCP、UDP协议;控制反转的设计模式(支持Spring);采用优雅的松耦合架构;可灵活的加载过滤器机制;单元测试更容易实现;可自定义线程的数量,以提高运行于多处理器上的性能;采用回调的方式完成调用,线程的使用更容易。 
     MINA框架的常用类
类NioSocketAcceptor用于创建服务端监听;
类NioSocketConnector用于创建客户端连接;
类IoSession用来保存会话属性和发送消息;
类IoHandlerAdapter用于定义业务逻辑,常用的方法有:
方法 定义
sessionCreated() 当会话创建时被触发
sessionOpened() 当会话开始时被触发
sessionClosed() 当会话关闭时被触发
sessionIdle() 当会话空闲时被触发
exceptionCaught() 当接口中其他方法抛出异常未被捕获时触发此方法
messageRecieved() 当接收到消息后被触发
messageSent() 当发送消息后被触发

      Time Server测试示例:

      测试环境:Eclipse,jdk1.6,所需jar包,slf4j-api-1.5.11.jar、slf4j-jdk14-1.5.2.jar、mina-core-2.0.2.jar。
      1、服务器端:

      1)服务器Server代码:

package org.apache.mina.example.gettingstarted.timeserver;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;

import org.apache.mina.core.service.IoAcceptor;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;

public class MinaTimeServer {
private static final int PORT = 9123;

public static void main(String[] args) throws IOException {
// 创建服务器监听

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 TimeServerHandler() );

// 设置buffer的长度

acceptor.getSessionConfig().setReadBufferSize( 2048 );

//设置连接超时时间
acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE, 10 );

// 绑定端口

acceptor.bind( new InetSocketAddress(PORT) );
}
}

 2)业务逻辑处理器代码:

package org.apache.mina.example.gettingstarted.timeserver;

import java.util.Date;

import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;

public class TimeServerHandler extends IoHandlerAdapter
{

//连接异常时处理方法
@Override
public void exceptionCaught( IoSession session, Throwable cause ) throws Exception
{
cause.printStackTrace();
}

/**
* 接收处理客户端消息

*/
@Override
public void messageReceived( IoSession session, Object message ) throws Exception
{
String str = message.toString();

if( str.trim().equalsIgnoreCase("quit") ) {
session.close(true);
return;
}

Date date = new Date();
session.write( date.toString() );
System.out.println("Message written...");
}

/**
* 连接超时时处理方法

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

 

2、客户端测试代码

1)客户端代码

package com.kdiller.mina;

import java.net.InetSocketAddress;
import java.nio.charset.Charset;

import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketConnector;

public class MinaTimeClient {
 public static void main(String[] args) {
  // 创建客户端连接器.
  NioSocketConnector connector = new NioSocketConnector();
  connector.getFilterChain().addLast("logger", new LoggingFilter());
  connector.getFilterChain().addLast(
    "codec",
    new ProtocolCodecFilter(new TextLineCodecFactory(Charset
      .forName("UTF-8")))); // 设置编码过滤器
  connector.setConnectTimeout(30);
  connector.setHandler(new TimeClientHandler());// 设置事件处理器
  ConnectFuture cf = connector.connect(new InetSocketAddress("127.0.0.1",
    9123));// 建立连接
  cf.awaitUninterruptibly();// 等待连接创建完成
  cf.getSession().write("hello");// 发送消息
  cf.getSession().write("quit");// 发送消息
  cf.getSession().getCloseFuture().awaitUninterruptibly();// 等待连接断开
  connector.dispose();
 }
}

2)客户端处理器

package com.kdiller.mina;

import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;

public class TimeClientHandler extends IoHandlerAdapter {
 public TimeClientHandler() {
 }

 @Override
 public void messageReceived(IoSession session, Object message)
   throws Exception {
  System.out.println("messageReceived method was called!");
  System.out.println(message);// 显示接收到的消息
 }

 @Override
 public void exceptionCaught(IoSession session, Throwable cause)
   throws Exception {
  // TODO Auto-generated method stub
  super.exceptionCaught(session, cause);
 }

 @Override
 public void messageSent(IoSession session, Object message) throws Exception {
  // TODO Auto-generated method stub
  super.messageSent(session, message);
  System.out.println("messageSent method was called!");
  System.out.println(message);
 }

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

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

 @Override
 public void sessionIdle(IoSession session, IdleStatus status)
   throws Exception {
  // TODO Auto-generated method stub
  super.sessionIdle(session, status);
 }

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

 

Tina Linux WiFi驱动移植避坑指南:以RTL8733bs为例,详解设备树、Kconfig与固件依赖 本文详细解析了在Tina Linux上移植RTL8733bs WiFi驱动的关键步骤与常见问题,涵盖设备树配置、内核依赖、固件加载及启动时序等核心环节。通过实战案例和排查清单,帮助开发者规避SDIO控制器配置、电源管理、GPIO极性等典型陷阱,确保驱动稳定运行。 阅读详情

相关推荐

MinaServer:学习使用mina框架

MinaServer 学习使用mina框架 SocketServer.java为原生的serverSocket创建的socket服务器、实现与多个客户端socket实时通信; 由于随着客户端数量的增加;原生的serversocket不能很好的管理与各个客户端连接的socket和内存消耗的问题; 改用网络通信框架、目前比较流行的又netty、mina;由于主要作者是同一个人所以差别不是很大、这边选择mina学习; minaserver为采用mina搭建的基本服务器;这边使用了自带的简单TextLineCodesFactory;也自定义了了一个factory;加深理解;

Mina实战一:建立Server和Client。有Client加入,Server广播给所有Client

Mina框架介绍:https://blog.csdn.net/haoranhaoshi/article/details/89102597 Mina实战一:建立Server和Client。有Client加入,Server广播给所有Client:https://blog.csdn.net/haoranhaoshi/article/details/89103348 Mina实战二:在控制台中Client...

haoranhaoshi的博客 470

Apache Mina Server 2.0 中文参考手册(带目录)

mina推送mina推送mina推送mina推送mina推送mina推送mina推送mina推送

Apache Mina Server初接触

Apache Mina Server是一个网络通信应用框架,主要是对基于TCP/IP,UDP/IP协议栈的通信框架,Mina可以帮助快速开发高性能、高扩展性的网络通信应用,Mina提供了事件驱动、异步操作的编程模型。Mina同时提供了网络通信的Server端、Client端的封装

God's blog 2785

mina框架详解

Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于TCP/IP、UDP/IP协议栈的通信框架(当然,也可以提供JAVA 对象的序列化服务、虚拟机管道通信服务等),Mina 可以帮助我们快速开发高性能、高扩展性的网络通信应用,Mina 提供了事件驱动、异步(Mina 的异步IO 默认使用的是JAVA NIO 作为底层支持)操作的编程模型。Mina 主要有1.x 和2.x 两个分支,这里我们讲解最新版本2.0,如果你使用的是Mina 1.x,那么可能会有一些功能并不适用。

码灵的博客 8726

【转】Apache Mina 网络通信

转自大海巨浪的博客 http://blog.sina.com.cn/dongzhizhong5158 Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于TCP/IP、UDP/IP 协议栈的通信框架(当然,也可以提供JAVA 对象的序列化服务、虚拟机管道通信服务等), Mina 可以帮助我们快速开发高性能、高扩展性的网络通信应用,Mina 提供了...

zain_zhang的博客 409

mina学习总结

一、简介: Apache Mina Server 是一个网络通信应用框架,Mina 可以帮助我们快速开发高性能、高扩展性的网络通信应用,Mina 提供了事件驱动、异步(Mina 的异步 IO 默认使用的是 JAVA NIO 作为底层支持)操作的编程模型。 二、使用示例: 三、体系结构: 1.IoService: 负责具体的IO相关工作。IOService的意义在于隐藏底...

weixin_30732825的博客 161

MINA经典入门例子----Time Server .

http://blog.csdn.net/kdiller/article/details/6175755 貌似java的IO、NIO的入门例子都有相关的Time Server Demo。本例为MINA官方Demo翻译过来而已。   MINA百科:    Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Ap

Mindy的专栏 582

MINA之基于TCP/IP的Time Server

前提: 1、MINA 2.0.7 Core 2、JDK 1.5 或更高版本 3、[SLF4J|http://www.slf4j.org/] 1.3.0 orgreater                1)Log4J 1.2 users: slf4j-api.jar, slf4j-log4j12.jar, and Log4J 1.2.x                2)

珑歆逸的专栏 1190

Mina源码分析——IoService

这两天看了下Mina和Netty的源码,想比较来说Mina的结构简洁易懂。Mina和Netty出自同一人,而Netty是作者对Mina的重构版,改进了很多。如果学习网络编程的话,个人建议从Mina开始,学完Mina后再看Netty,学习曲线会变得很平滑;同时还能深刻理解到作者改进点。    先看下Mina的结构图,如果之前做过java的web开发,熟悉servlet规范,看到这个结构图,会觉

coderdesion 515

基于Mina的Http Server以及简单的Http请求客户端

NULL 博文链接:https://ajita.iteye.com/blog/1461800

Apache Mina开发手册

作者:chszs,转载需注明。博客主页:http://blog.csdn.net/chszs 一、介绍 Apache Mina是一个网络应用框架,简化用户开发高性能、高可扩展性的网络应用程序的难度。Mina提供了一个抽象的事件驱动的异步API,通过Java NIO实现各种传输协议如TCP/IP和UDP/IP。 Apache Mina经常用作: 1)NIO

xyjikl 557

Rails 部署选 Mina 还是 Capistrano?轻量透明与掌控力的实战权衡

Rails 应用部署本质上是将代码、依赖、配置和运行时环境在服务器上可靠组装的过程。其核心原理在于通过 SSH 协调远程执行(如 git pull、bundle install、db:migrate),而技术价值体现在可重复性、原子性与故障可见性上。主流方案中,Capistrano 以约定优于配置提供丰富插件生态,但抽象层级高、调试成本大;Mina 则回归本质——作为 Ruby 编写的 SSH 命令组装器,强调流程透明、无状态、低侵入,天然适配需要精细控制、快速排障及渐进式自动化运维的中小型 Rails 生

weixin_30328063的博客 358

MINA 框架简介

Apache Mina应用框架

风轻淡淡的博客 1783

nio框架apache mina使用经验总结(转)

最近做的一个项目用到了开源的C/S应用的服务器框架MINA,当初做的时候资料非常少,只能自己不停的测试,总结出了一些规律经验。 从网上看的资料上看,这个服务器框架还是比较稳定和支持的并发数还是很不错的,不过没有准确的数据,而且我做完的时候也没有拿到真正的实际环境中测试过,用的时候也发现了很多优点和缺点,使用者可以自己去根据自己的使用需求去衡量是否使用该框架。 服务器是商业系统很重要的一部分,主...

My Way 514

Mina网络应用程序NIO框架实战详解

网络编程的基本模型是C/S模型,即两个进程间的通信。课程通过循序渐进的方式从相关的名词概率介绍,到基础的模型BIO、NIO、AIO实现和练习,重点讲解NIO相关的知识,然后延伸到NIO框架上去练习。课程还将在工作中应用较多的几种编解码器进行详细分析和练习。Mina是基于java NIO类库开发;采用非阻塞方式的异步传输;事件驱动;支持批量数据传输;支持TCP、UDP协议;支持Spring;采用优雅的松耦合架构;可灵活的加载过滤器机制;

模仿:在pythonTensorflow中实施逆向强化学习(IRL)算法。 深度MaxEnt,MaxEnt,LPIRL

模仿在python / Tensorflow中实现选定的逆向强化学习(IRL)算法。 python demo.py实现的算法线性逆强化学习(Ng&Russell 2000) 最大熵逆强化学习(Ziebart et al。2008) 最大熵深度逆强化学习(Wulfmeier et al。2015)已实施MDP和求解器网格世界2D 网格世界1D 价值迭代依存关系python 2.7 cvxopt Tensorflow 0.12.1 matplotlib线性逆向强化学习根据Ng和Russell 2000的论文:算法,算法1 $ python linear_irl_

上一篇: FLASH资源网站
下一篇: Webgame的mina聊天服的优化
无心的雨
博客等级 码龄18年 17粉丝 13原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无心的雨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值