Thrift --- 支持雙向通訊

【問題】架構

 

Thrift採用了C/S模型,不支持雙向通訊:client只能遠程調用server端的RPC接口,但client端則沒有RPC供server端調用,這意味着,client端可以主動與server端通訊,但server端不能主動與client端通訊而只能被動地對client端的請求做出應答。這種RPC模式在某些應用中存在缺陷,好比:有些應用,在大部分狀況下,client端會主動向server端發請求或者向server端發送數據,而在少部分狀況下,server端也須要主動向client發送一些命令,告知進行某些操做。異步

(什麼是Thrift,可參考:Thrift架構介紹socket

爲了解決該問題,一般有三種方案可供選:.net

方案一:輪詢(可選)server

該方案很容易想到:client端週期性地向server端詢問是否須要進行某些操做,若是須要,則什麼也不作,若是須要,則按照server的應答(response)要求進行操做。該方案的不足是延遲較大、且會浪費大量資源,形成沒必要要的訪問開銷。blog

方案二:雙client/server(推薦)接口

通訊雙方都既是client,也是server。該方案須要在通訊雙方之間創建兩個通訊通道,開啓兩個端口,這比較繁瑣,且很不優雅。但還是目前廣泛採用的一套方案。資源

client/server <————————-> client/serverget

方案三:異步共享通道(不推薦)it

Thrit底層其實是socket,而socket是支持雙向傳輸的,所以,咱們徹底能夠經過修改thrift自己實現雙向傳輸。有興趣的讀者可參考:

http://blog.csdn.net/qq_27989757/article/details/50725973

相關文章
相關標籤/搜索