【问题标题】:Netty - can I cache those ChannelHandlerContext in Hash map and response it later?Netty - 我可以在哈希映射中缓存那些 ChannelHandlerContext 并稍后响应吗?
【发布时间】:2015-03-04 12:08:03
【问题描述】:

下面是实现的步骤和问题:

  1. Netty 服务器处理程序接收来自客户端的消息

  2. 因为还有其他正在运行的线程来处理用户数据,所以我们需要把这个请求放到一个队列中,让worker处理

  3. worker处理完数据后,是否可以在worker线程中回复客户端?即使用 HashMap 缓存 ChannelHandlerContext 并稍后从工作线程获取它以响应?

谢谢大家

【问题讨论】:

    标签: java multithreading netty


    【解决方案1】:

    是的,你可以。 ChannelHandlerContext 提供的操作都是线程安全的,因此您可以保留上下文实例以供以后使用并在其他线程中使用。

    ChannelHandlerContext 与其所属的Channel 具有相同的生命周期。当Channel 关闭时,ChannelHandlerContext 也会从管道中取消引用。如果您保留对 ChannelHandlerContext 的引用,您应该取消引用它或确保垃圾收集器可以回收它。

    【讨论】:

    • 我可以知道上下文何时会从内存中删除吗?是http超时的时候吗?此外,当我将其缓存在 Memory 中时,其他请求是否可能重用相同的上下文?非常感谢
    • 答案已更新。您当然可以使用相同的上下文对象从不同的线程写入多条消息。
    猜你喜欢
    • 1970-01-01
    • 2015-08-31
    • 1970-01-01
    • 2016-01-10
    • 1970-01-01
    • 1970-01-01
    • 2021-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多