当前位置: 首页 > news >正文

河南网站制作公司哪家好/新乡seo外包

河南网站制作公司哪家好,新乡seo外包,腾讯企点怎么改名字,新闻 近期大事件介绍 本教程通过构建一个时间服务器(time server),向你展示基于MINA应用的构建过程,以下是进行本教程的先决条件: MINA 2.x的核心包JDK 1.5 或更高版本 SLF4J 1.3.0 或更高版本 ? Log4J 1.2的用户:s…

介绍

本教程通过构建一个时间服务器(time server),向你展示基于MINA应用的构建过程,以下是进行本教程的先决条件:


MINA 2.x的核心包
JDK 1.5 或更高版本
SLF4J 1.3.0 或更高版本

?    Log4J 1.2的用户:slf4j-api.jar, slf4j-log4j12.jar, 和 Log4J 1.2.x

?    Log4J 1.3的用户:slf4j-api.jar, slf4j-log4j13.jar, 和Log4J 1.3.x

?    java.util.logging的用户:slf4j-api.jar 和 slf4j-jdk14.jar

注意:请确保使用正确的slf4j-*.jar与你的日志框架相匹配。例如,slf4j-log4j12.jar和log4j-1.3.x.jar不能在一起使用,否则会引起混乱。

我已经在Windows 2000 professional 和 linux平台上测试了这个程序,如果你在运行这个程序的过程中遇到了问题,请立即联系我们的开发人员。当然,本教程尽量保持与开发环境(IDE, editors等等)无关,它可以在任何你熟悉的平台中运行。另外,为了简化,编译命令与运行脚本都没有体现,如果你需要帮助了解如何编译并运行java程序,请参考Java tutorial。


编写MINA时间服务器

首先创建一个名为MinaTimeServer.java的文件,最初的代码如下:

public class MinaTimeServer {

 

    public static void main(String[] args) {

        // code will go here next

    }

}  

对所有人来说,这段代码应该很简单,我们只是简单的定义了一个main方法启动这个程序。从现在开始,我们将逐步加入代码实现时间服务器。首先,我们需要一个对象用来监听到来的连接,既然我们的程序是基于TCP/IP的,所以我们在程序中加入一个 SocketAcceptor。

import org.apache.mina.core.service.IoAcceptor;

import org.apache.mina.transport.socket.nio.NioSocketAcceptor;

 

public class MinaTimeServer

{  

    public static void main( String[] args )

    {

        IoAcceptor acceptor = new NioSocketAcceptor();

    }  

}

加入NioSocketAcceptor之后,我们可以继续定义一个handler类,并将NioSocketAcceptor绑定到一个端口上。

下面,我们在配置中添加一个filter,这个filter将记录所有的日志信息,例如session创建,消息接收,消息发送,消息关闭。下一个filter是ProtocolCodecFilter,其把二进制数据或是协议相关的数据转换成为一个消息对象,反之亦然。我们使用一个现有的TextLine工厂类处理基于文本的消息(你不必自己实现编解码部分)。

import java.nio.charset.Charset;

 

import org.apache.mina.core.service.IoAcceptor;

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

{

    public static void main( String[] args )

    {

        IoAcceptor acceptor = new NioSocketAcceptor();

 

        acceptor.getFilterChain().addLast( "logger", new LoggingFilter() );

        acceptor.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" ))));

    }

}

然后,我们定义handler,用来服务客户端的连接和当前时间的请求。handler类必须实现 IoHandler接口。对于大多数基于MINA的应用程序,这是编程的重心,因为它将处理所有来自客户端的请求。在本教程中,我们将继承自IoHandlerAdapter类,这个类遵循适配器模式,其简化实现IoHandler接口所带来的代码量。

import java.io.IOException;

import java.nio.charset.Charset;

 

import org.apache.mina.core.service.IoAcceptor;

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

{

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

    }

}

现在,我们在NioSocketAcceptor中添加配置,这将应用于接收客户端连接的socket设置。

import java.io.IOException;

import java.nio.charset.Charset;

 

import org.apache.mina.core.session.IdleStatus;

import org.apache.mina.core.service.IoAcceptor;

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

{

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

        acceptor.getSessionConfig().setReadBufferSize( 2048 );

        acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE, 10 );

    }

}

在MinaTimeServer增加了两行新内容,这些set方法分别设置了IoHandler、输入buffer大小和session对象上的idle属性。Buffer大小告诉底层操作系统应该分配多大空间放置到来的数据;第二行指明什么时候应该检测session空闲。在setIdleTime方法中,第一参数定义当session空闲时,检测那些活动,第二个参数定义session变为空闲状态时需要经过多长的时间。

handler的代码如下:

import java.util.Date;

  

import org.apache.mina.core.session.IdleStatus;

import org.apache.mina.core.service.IoHandlerAdapter;

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

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

    }

}

该类用到的方法有exceptionCaught、messageReceived和sessionIdle。在handler中,应该总是定义 exceptionCaught方法,该方法用来处理在处理远程连接的过程中发生的各种异常,如果此方法没有定义,可能无法获得正确的异常报告。

exceptionCaught方法只是简单地打印出异常堆栈信息并关闭连接,对于大多数程序来说,这是标准做法,除非连接可以在异常情况下恢复。

messageReceived方法接收客户端的数据并返回当前的系统时间,如果来自客户端的消息为‘quit’,则session关闭。根据协议编解码器的不同,传入该方法的对象(第二个参数)也是不同的,该对象与调用session.write(Object)方法传入的对象相同。如果你没有指定协议编解码器,你可能接收到一个IoBuffer对象,当然,必须输出IoBuffer对象。

当session保持指定(acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE, 10 )设置的)时间的空闲时,sessionIdle方法将被调用。

剩下的就是定义server监听的地址和端口了,当然还需要启动服务器。代码如下:

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() );
         acceptor.getSessionConfig().setReadBufferSize( 2048 );
        acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE, 10 );
        acceptor.bind( new InetSocketAddress(PORT) );
    }
}

正如你看到的, acceptor.setLocalAddress( new InetSocketAddress(PORT) ),方法定义server将监听哪个主机和端口。最后调用IoAcceptor.bind()方法,该方法绑定端口并启动远程客户端的处理过程。


验证Time server

现在编译程序,编译完成后就可以运行并查看运行结果了。最简单的测试方式就是启动程序,并使用telnet与之建立连接:

 

user@myhost:~> telnet 127.0.0.1 9123
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
hello
Wed Oct 17 23:23:36 EDT 2007
quit
Connection closed by foreign host.
user@myhost:~>

http://www.lbrq.cn/news/1074025.html

相关文章:

  • 福州企业建站程序/网店代运营骗局
  • ps里新建网站尺寸怎么做/百度指数批量查询
  • 网站服务器开发/温州seo品牌优化软件
  • 网站域名想更换要怎么做/微信管理软件
  • 诸城哪里有做网站的/公司网站排名
  • 做动态网站需要什么软件/宁波优化网站厂家
  • 武汉建网公司网站建设/百度搜索关键词优化方法
  • 河北永生建筑工程网站/网站开发框架
  • 建立自信/汕头seo全网营销
  • 微网站免费制作/趣丁号友情链接
  • 网站建设工作室简介/个人网站的制作模板
  • 网站建设专业性的评价/推广信息发布平台
  • php 修改 wordpress/抖音seo点击软件排名
  • 自助wap建站/武汉百度推广多少钱
  • 乒乓球网站建设目标/百度seo建议
  • 做网站用什么编程/百度搜索引擎技巧
  • 建设商务网站公司/谷歌seo是指什么意思
  • 打电话叫人做网站/万维网域名注册查询
  • 做照片书的网站/百度退款客服电话
  • 赛扶做网站/什么推广平台好
  • 合肥做网站哪家公司好/html网页制作模板
  • 网站中的关键词seo设置/最新热点新闻
  • 青浦b2c网站制作价格/人力资源培训网
  • 石狮市建设局网站/seo推广怎么收费
  • 网站建设的目标是/美国疫情最新数据消息
  • 石家庄专门做网站的公司/搜索引擎营销怎么做
  • 百度收录网站左侧图片/海南百度推广中心
  • 企业官方网站建设方案/百度sem竞价推广电子书
  • 做调查问卷赚钱网站有哪些/网络营销买什么好
  • 专门型网站/搜索引擎优化的简写是
  • Python篇--- Python 的加载、缓存、覆盖机制
  • 【设计模式】4.装饰器模式
  • 单位长度上的RC参数
  • Autosar Nm-网管报文PNC停发后无法休眠问题排查
  • ART数据库索引结构--ART,The adaptive radix tree论文细读
  • 技巧|SwanLab记录ROC曲线攻略