1

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

但是我想直接在客户端中使用,或者更好地接收/接受一些消息,而不是(只是)在处理程序中。所以我的问题是是否可以让一些侦听器直接在客户端程序中而不是在其处理程序中接收消息。薄是我想访问(可执行)程序(基本上是具有 main 方法的类)中接收到的消息,该程序创建了一个新的客户端对象,使用类似于计时器(或循环)的东西,它会定期检查新的消息。

如果有人可以帮助我解决这个问题,我将不胜感激。或者至少告诉我是否可以使用 netty 。

4

1 回答 1

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连接来获得相同的最终结果。

于 2011-09-14T07:55:55.450 回答