当前位置: 首页 > 知识库问答 >
问题:

我可以在HashMap中缓存来自ChannelHandlerContext的通道吗?

米夕
2023-03-14

如果缓存通道[ctx.Channel()]而不是缓存ChannelHandlerContext,会有什么不同吗?

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

>

  • Netty服务器处理程序从客户端接收消息
  • 因为有其他正在运行的线程来处理用户数据,所以我们需要将此请求放到队列中,并让辅助处理
  • 服务器和客户端之间的多消息交换需要使用相同的连接
  • 每当消息准备好从辅助线程发送到客户端时,最好使用缓存在HashMap中的通道

    final ChannelFuture status=channel.writeandflush(unpooled.copiedbuffer(payload.getBytes()));

    谢谢大家

  • 共有1个答案

    叶华皓
    2023-03-14

    是的,您可以缓存通道并在以后使用它。如果您所需要的只是writeandflush()稍后从另一个线程获取消息,那么只需缓存通道就可以了。

    ChannelHandlerContext在希望动态修改管道、在管道中上下触发事件等时非常有用。如果不需要这些,可以使用Channel

     类似资料:
    • 以下是实施步骤和问题: > 因为还有其他正在运行的线程来处理用户数据,所以我们需要将此请求放到队列中,让工作线程处理 工人处理完数据后,我们能在工人线程中响应回客户端吗?也就是说,要么使用HashMap缓存ChannelHandlerContext,然后从工作线程到响应获取它? 谢谢大家

    • 我正在评估Netty作为我们内部开发的网络堆栈的替代品和/或替代品。整体设计非常相似,除了一个问题外,很容易更换。 在我们的服务器进程中,我们有时需要直接访问SocketChannel,以便使用通道将数据发送到客户端。transferTo()我看不到访问Netty中SocketChannel的方法。例如,ChannelHandlerContext接口中没有任何内容。 我将开始挖掘源代码,但是有人知

    • 问题内容: 我有一个Web应用程序,人们需要资源。使用同步哈希映射来缓存此资源以提高效率。这里的问题是,当两个不同的请求同时到达同一未缓存资源时:检索资源的操作占用大量内存,因此我想避免为同一资源多次调用它。 有人可以告诉我以下代码段是否存在任何潜在问题吗?提前致谢。 问题答案: 一个可能的问题是,您通过在一个块内执行来创建不必要的竞争,因此许多线程无法同时检索其(独立)资源。这可以通过使用map

    • 问题内容: 我知道这取决于系统中可用的内存,还取决于良好的哈希函数,但总的来说,我想知道您使用的最大地图是什么,以及是否开箱即用,需要进行任何调整才能使其正常运行。 问题答案: Java中的A 最多可以有2 ^ 30个存储桶来存储条目- 这是因为所使用的存储桶分配技术要求存储桶的数量为2的幂,并且因为ints是用Java签名的,所以最大正值是2 ^ 31-1,因此2的最大乘方是2 ^ 30。 但是

    • 问题内容: 编写Java程序时,对CPU如何利用其缓存存储数据有影响吗?例如,如果我有一个经常访问的数组,那么它是否足够小以适合一个高速缓存行(在64位计算机上通常为128字节)是否有帮助?如果我将一个经常使用的对象保持在该限制之内,我可以期望它的成员使用的内存紧密并留在缓存中吗? 背景:我正在构建一个压缩的数字树,它受C语言中Judy数组的启发很大。虽然我主要追求其节点压缩技术,但Judy将CP

    • 问题内容: 我的任务是利用SpringCache作为我们的一项服务,以减少数据库查找的次数。在测试实现时,我注意到一些可缓存操作通过日志语句多次调用。调查显示,如果在可缓存的方法中调用了可缓存的操作,则嵌套操作根本不会被缓存。因此,嵌套操作的后续调用将导致进一步的查找。 下面列出了描述问题的简单单元测试: 这两种方法的实际工作对于测试用例本身并不重要,因为仅应测试缓存。 我以某种方式理解了为什么不