與boost.asio不同,netty沒有類似於讀取的方法。在以下情況下不方便: 管理節點管理一些節點,客戶端連接管理節點以檢索駐留在節點中的信息。當管理節點接收到客戶端的請求時,它向相應節點發送一個請求並等待節點響應。當節點響應和管理節點在其'messageReceived'函數中獲取信息時,如何將信息發送到屬於客戶端的通道?它需要發送一個事件給客戶端請求的Handler。如何將事件發送到netty中的其他處理程序?
1.get客戶機請求
2.發送請求至節點
3.read該節點的響應
4.send響應於客戶端
所有這些4步驟可以在boost.asio中的一個函數中完成。但netty不支持step3,讀取功能是獨立的,用戶不能直接調用它。唯一的方法是在管理節點和節點之間的處理程序中收到響應後,將其重新發送到管理節點和客戶機之間的處理程序。 這樣做的典型方法是什麼?
我把客戶端的通道ID放入從管理節點發送到節點的包中,所以當節點響應時,我知道應該使用哪個客戶端通道。 – jean
我想有一些實用程序或典型的技巧可以解決這個問題。順便說一句,我覺得netty的設計理念是某種限制。事實上,我說的4個步驟可以在異步中完成,asio通過完整的回調處理程序鏈來完成。 – jean
在netty中,channel.write()將爲您提供一個ChannelFuture。你可以爲這個未來的對象添加一個FutureListener,也就是一個回調函數,所以你在Netty中也有類似的功能。所以你可以在第二步等待,或者在結尾做一些邏輯,但第三步來自客戶端,所以這個回調不會有幫助。 – Abe