Java 直接在客户端处理接收到的消息(通过netty框架使用nio)

Java 直接在客户端处理接收到的消息(通过netty框架使用nio),java,netty,Java,Netty,我使用netty制作了一个客户机-服务器示例。 我已经为服务器和客户端定义了处理程序。 基本上,我将客户端连接到服务器并发送一些消息。 每个接收到的消息都会被发回(消息内容被转换为大写)。 服务器端和客户端上接收到的消息的所有工作都由定义的处理程序完成 但是我想直接在客户端中使用或更好地接收/接受一些消息 不仅仅是在处理器中。所以我的问题是,有没有可能让一些侦听器直接在客户机程序中而不是在其处理程序中接收消息。瘦是我想访问(可执行)程序(基本上是带有main方法的类)中接收到的消息,该程序创建了

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

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


如果有人能帮我解决这个问题,我将不胜感激。或者至少告诉我,如果有内蒂的话

您希望将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优势。对于相同的净结果,您可以使用普通的
套接字
连接。

您希望将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优势。您可以使用正常的
套接字
连接来获得相同的净结果。

thx。这基本上就是我现在实现的。尽管你有权认为它扼杀了我使用atm所需的优势(因为我不想实现进一步的消息处理)thx。这基本上就是我现在实现的。尽管你有权认为它扼杀了我使用atm所需的优势(因为我不想实现进一步的消息处理)