【问题标题】:Handling received messages directly in the Client (using nio trough the netty-framework)直接在客户端处理接收到的消息(通过 netty-framework 使用 nio)
【发布时间】:2011-09-14 07:15:07
【问题描述】:

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

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

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

【问题讨论】:

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

    【讨论】:

    • 谢谢。这基本上就是我现在实施的。尽管你的权利,它扼杀了我在 atm 使用它所需的优势(因为我不想实现一些进一步的消息处理)
    猜你喜欢
    • 2021-06-07
    • 2012-11-02
    • 2020-08-13
    • 2018-03-30
    • 2018-04-26
    • 2021-01-15
    • 2020-07-10
    • 1970-01-01
    • 2014-11-01
    相关资源
    最近更新 更多