2011-09-14 50 views
1

我已经使用netty制作了一个客户端 - 服务器示例。 我已经为服务器和客户端定义了处理程序。 基本上我将客户端连接到服务器并发送一些消息。 每个收到的消息都会被发回(消息内容被转换为大写)。 在服务器和客户端收到的消息的所有工作都由定义的处理程序完成。直接在客户端处理收到的消息(使用nio通过netty-framework)

但是我想直接在客户端 中使用或更好地接收/接受一些消息,而不仅仅是在处理程序中。所以我的问题是有可能让一些监听器直接在客户端程序中接收消息,而不是在其处理程序中。细细是我想访问(可执行)程序(基本上是一个主要方法的类)接收到的消息,创建一个新的客户端对象,使用像定时器(或循环),将定期检查新消息。

如果有人能帮我解决这个问题,我将不胜感激。或者至少告诉我,如果它甚至可能与netty。

回答

1

您正在寻找将netty的基于事件的模型转换为轮询模型。一个简单的方法来做到这一点是创建一个消息队列:

//import java.util.concurrent.BlockingQueue; 
//import java.util.concurrent.LinkedBlockingQueue; 
BlockingQueue queue = new LinkedBlockingQueue(); 

你需要让现有的队列处理程序的构造函数的参数,当消息到达你把它放入队列:

// Your netty handler: 
queue.put(message); 

在客户端,您可以查询队列中的消息:

// The polling loop in your program: 
message = queue.poll(5, TimeUnit.SECONDS); 

BlockingQueue为您提供等待消息的到达之间的选择(take()),等待一定的时间消息到达(poll(long, TimeUnit)),或者仅仅检查是否有任何消息可用(poll())。

从设计的角度来看,这种方法杀死了netty应该给你的非阻塞IO优势。您可以使用正常的Socket连接获得相同的净结果。

+0

thx。这基本上是我现在实施的。尽管你的权利,它杀死我需要使用它atm的优势(因为我不想实施一些进一步的消息处理) – c3p0

相关问题