2017-10-19 60 views
0

讓我們想象有一臺服務器,當接收到一個汽車模型的請求時,查詢所有已知的汽車經銷商尋找最便宜的汽車經銷商,並用價格迴應(使用任何協議)。此操作需要一段時間。 在一個偶然的禁止請求/響應服務器模式,我做Netty - 它是如何異步的?

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的異步來自哪裏?客戶端需要什麼來從異步獲益?

+0

你不需要'庫匹配'。用JSON/HTTP說話,就完成了。 netty的異步性來自於它的設計。 – rkosegi

+0

@rkosegi使用HTTP時請注意,它最好使用websockets。當使用HTTP時,你必須使用煩人的方式來正確支持規範中的強制流水線部分,因爲你永遠不知道客戶端可能會使用這個部分。由於這個原因,現在大多數家庭發明的HTTP服務器都被破壞了。 – Ferrybig

+0

@rkosegi - 我不太明白JSON與異步性有什麼共同之處。 Netty不需要HTTP。 –

回答

1

netty的異步來自哪裏?

Netty採用了您可能從JavaScript等語言中瞭解的事件回調原理。這可以讓netty完全異步工作。 (有關eventloops更多信息和基本原則去我會建議this video在JavaScript代碼中evenloop)

,我需要在客戶端什麼從asynchronousness受益?

  1. 客戶端發送請求(包含有效載荷和請求ID =客戶機側遞增的整數)
  2. 服務器處理爲50秒
  3. 服務器請求發送響應(包含有效載荷和相同的請求ID的客戶端發送在他的請求)
  4. 客戶端收到響應並查找請求ID(如果客戶能夠找到請求ID及其基本回調會調用它)

希望有幫助