Netty - 它是如何异步的?

Netty - how is it asynchronous?

让我们假设有一个服务器,当它收到一个带有汽车型号的请求时,它会查询所有已知的汽车经销商寻找最便宜的汽车,并以价格(使用任何协议)进行响应。此操作需要一段时间。 在临时阻塞 request/response 服务器模型中,我

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的异步从何而来?我在客户端需要什么才能从异步中受益?

Where is the asynchronousness of netty coming from?

Netty 采用了事件循环的原理,您可能从 JavaScript 等语言中了解到这一点。这允许 netty 完全异步地工作。 (有关事件循环和基本原理的更多信息,我建议 this video 关于 JavaScript 中的事件循环)

What do I need on the client side to benefit from the asynchronousness?

  1. 客户端发送请求(包含负载和请求 id = 客户端递增整数)
  2. 服务器处理请求 50 秒
  3. 服务器发送响应(包含负载和客户端在其请求中发送的相同请求 ID)
  4. 客户端收到响应并查找请求 ID(如果客户端能够找到请求 ID 及其底层回调,它将调用它)

希望对您有所帮助