WEB开发网
开发学院软件开发Java 深入理解Apache Mina (2)---- 与IoFilter相... 阅读

深入理解Apache Mina (2)---- 与IoFilter相关的几个类

 2009-09-16 00:00:00 来源:WEB开发网   
核心提示: IoFilterAdpater有三个子类,它们的作用分别如下:LoggingFilter:日志工具,深入理解Apache Mina (2)---- 与IoFilter相关的几个类(3),该类处理记录IoFilter每个状态触发时的日志信息外不对数据做任何处理,它实现了IoFilter接口的所有方

IoFilterAdpater有三个子类,它们的作用分别如下:

LoggingFilter:日志工具,该类处理记录IoFilter每个状态触发时的日志信息外不对数据做任何处理。它实现了IoFilter接口的所有方法。你可以通过阅读该类的源码学习如何实现你自己的IoFilter。

ExcuterFilter:这个Mina自身提供的一个线程池,在 Mina中你可以使用这个类配置你自己的线程池,由于创建和销毁一个线程,需要耗费很多资源,特别是在高性能的程序中这点尤其重要,因此在你的程序中配置一个线程池是很重要的。它有助于你提高你的应用程序的性能。关于配置Mina的线程池在后续的文档中会给出详细的配置方法。

ProtocolFilter:该类是Mina提供的一个协议编解码器,在socket通信中最重要的就是协议的编码和解码工作,Mina提供了几个默认的编解码器的实现,在下面的例子中使用了 ObjectSerializationCodecFactory,这是Mina提供的一个Java对象的序列化和反序列化方法。使用这个编解码器,你可以在你的Java客户端和服务器之间传递任何类型的Java对象。但是对于不同的平台之间的数据传递需要自己定义编解码器,关于这点的介绍会在后续的文档中给出。

为了更加清楚的理解这个过滤器的作用我们先来看一个简单的例子,这个例子的功能就是服务器在客户端连接到服务器时创建一个会话,然后向客户端发送一个字符串(完整的源码在附件中,这里只给出程序的简要内容):

Java代码  

ServerMain: 
public class ServerMain { 
 
 public static void main(String[] args) throws IOException { 
 SocketAddress address = new InetSocketAddress("localhost", 4321); 
 IoAcceptor acceptor = new SocketAcceptor(); 
 IoServiceConfig config = acceptor.getDefaultConfig(); 
 
 // 配置数据的编解码器 
 config.getFilterChain().addLast("codec", 
  new ProtocolCodecFilter(new ObjectSerializationCodecFactory())); 
 
 // 绑定服务器端口 
 acceptor.bind(address, new ServerHandler()); 
 System.out.println(" 服务器开始在 8000 端口监听 ......."); 
 } 
} 
 
ServerHandler: 
public class ServerHandler extends IoHandlerAdapter { 
 
 // 创建会话 
 public void sessionOpened(IoSession session) throws Exception { 
 System.out.println(" 服务器创建了会话 "); 
 session.write(" 服务器创建会话时发送的信息 。"); 
 } 
 
 // 发送信息 
 public void messageSent(IoSession session, Object message) throws Exception { 
 } 
 
 // 接收信息 
 public void messageReceived(IoSession session, Object message) 
  throws Exception { 
 } 
} 
 
ClientMain: 
public class ClientMain { 
 
 public static void main(String[] args) { 
 
 SocketAddress address = new InetSocketAddress("localhost", 4321); 
 IoConnector connector = new SocketConnector(); 
 IoServiceConfig config = connector.getDefaultConfig(); 
 
 // 配置数据的编解码器 
 config.getFilterChain().addLast("codec", 
  new ProtocolCodecFilter(new ObjectSerializationCodecFactory())); 
  
 config.getFilterChain().addLast("logger", new LoggingFilter()); 
 
 // 连接到服务器 
 connector.connect(address, new ClientHandler()); 
 System.out.println(" 已经连接到了服务器 " + address); 
 } 
} 
 
ClientHandler: 
public class ClientHandler extends IoHandlerAdapter { 
 
 // 发送信息 
 public void messageSent(IoSession session, Object message) throws Exception { 
 } 
 
 // 接收信息 
 public void messageReceived(IoSession session, Object message) 
  throws Exception { 
 System.out.println(" 客户端接收到的服务器的信息是 " + message); 
 } 
} 

上一页  1 2 3 4 5 6  下一页

Tags:深入 理解 Apache

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接