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

Netty -它是如何异步的?

耿招
2023-03-14

让我们假设有一个服务器,当收到一个汽车模型的请求时,它会查询所有已知的汽车经销商,寻找最便宜的汽车,并回复价格(使用任何协议)。这个动作需要一段时间。在一个临时的阻塞请求/响应服务器模型中,我这样做了

request = "audi a8" // prepare a request and one line after have the response
response = server.findCheapestCar(request) // takes 20 seconds

我不想阻塞我的客户机主线程20秒,所以我宁愿异步执行它。我对异步的理解是,我可以将某种对象传递给它,并在工作中携带一个对象。一旦服务器准备好响应,它将通知我传递的对象-

这种方法需要库匹配——客户端和服务器都需要知道对象。但是我希望我基于Netty构建的异步服务器能够处理来自不同客户端(C /Python和其他)的请求。

netty的异步性从何而来?为了从异步中获益,我在客户端需要什么?

共有1个答案

祁远
2023-03-14

netty的异步性从何而来?

Netty采用了事件循环的原理,你可能从JavaScript这样的语言中知道了这一点。这允许netty完全异步工作。(有关事件循环和基本基本原理的更多信息,我推荐这个关于JavaScript中evenloop的视频)

客户端需要什么才能从异步中受益?

    < li >客户端发送请求(包含有效负载和请求id =客户端递增整数) < li >服务器处理请求的时间为50秒 < li >服务器发送响应(包含有效负载和客户端在其请求中发送的相同请求id) < li >客户端接收响应并查找请求id(如果客户端能够找到请求id及其底层回调,它将调用它)

希望有所帮助

 类似资料:
  • 在过去的几天里,我一直在探索Netty,因为我正在编写一个快速而紧凑的HTTP服务器,它应该能够接收大量请求,而Netty的HTTP服务器实现非常简单,可以完成这项工作。 我的下一步是作为请求处理的一部分,我需要启动一个到外部web服务器的HTTP请求。我的直觉是实现一个可以同时发送大量请求的异步客户机,但我有点困惑什么是正确的方法。我的理解是,Netty服务器对每个传入消息都使用一个工作线程,因

  • 什么是 Netty Netty 是一个利用 Java 的高级网络的能力,隐藏其背后的复杂性而提供一个易于使用的 API 的客户端/服务器框架。Netty 提供高性能和可扩展性,让你可以自由地专注于你真正感兴趣的东西,你的独特的应用! 在这一章我们将解释 Netty 在处理一些高并发的网络问题体现的价值。然后,我们将介绍基本概念和构成 Netty 的工具包,我们将在这本书的其余部分深入研究。 一些历

  • 我正在构建一个tcp客户端来接收和发送消息。我按照Netty用户指南中的步骤编写了一个简单的tcp客户端,其中包含一个扩展的自定义处理程序。 在hander中,我存储了< code > ChannelHandlerContext : 然后我有一个发送方法,它使用发送消息: 我发现的另一个选项是在客户机类中使用

  • 问题内容: 我一直在阅读JLS,并且遇到了11.1.3节。我引用的异步异常是: 大多数异常是由于它们所发生的线程的操作而同步发生的,并且在程序中被指定为可能导致此类异常的某个点处发生。相反,异步异常是在程序执行的任何时候都可能发生的异常。 和 异步异常仅由于以下原因而发生: […] * Java虚拟机中的内部错误或资源限制,阻止其实现Java编程语言的语义。在这种情况下,引发的异步异常是Virtu

  • 我正在创建一个服务器,该服务器使用来自许多来源的命令,例如JMS,SNMP,HTTP等。这些都是异步的,并且工作正常。服务器维护与单个传统硬件项目的单个连接,该项目具有具有自定义TCP协议的请求/应答体系结构。理想情况下,我想要一个像这样的阻塞类型方法的命令 或者这个异步类型的方法 我对Netty和异步编程比较陌生,基本上是边学边学。我目前的想法是,我的类将具有公共同步问题CommandToLeg

  • 如果我在main中这样做,它将创建一个新线程,并将向其提交一个任务以进行异步计算。 如果您看到FutureTask文档,它还会说: 可取消的异步计算。此类提供了Future的基本实现,包括启动和取消计算、查询计算是否完成以及检索计算结果的方法。 那么,FutureTask是如何进行异步计算的呢?它是否在内部创建线程,并提交我们在实例化FutureTask时给它的任务,比如: 否则它不可能是异步计算