【問題】
thrift採用了c/s模型,不支援雙向通訊:client只能遠端呼叫server端的rpc介面,但client端則沒有rpc供server端呼叫,這意味著,client端能夠主動與server端通訊,但server端不能主動與client端通訊而只能被動地對client端的請求作出應答。這種rpc模式在某些應用中存在缺陷,比如:有些應用,在大部分情況下,client端會主動向server端發請求或者向server端傳送資料,而在少部分情況下,server端也需要主動向client傳送一些命令,告知進行某些操作。
(什麼是thrift,可參考:thrift架構介紹)
為了解決該問題,通常有三種方案可供選:
方案一:輪詢(可選)
該方案很容易想到:client端周期性地向server端詢問是否需要進行某些操作,如果需要,則什麼也不做,如果需要,則按照server的應答(response)要求進行操作。該方案的不足是延遲較大、且會浪費大量資源,造成不必要的訪問開銷。
通訊雙方都既是client,也是server。該方案需要在通訊雙方之間建立兩個通訊通道,開啟兩個埠,這比較繁瑣,且很不優雅。但仍是目前普遍採用的一套方案。
client/server <————————-> client/server
thrit底層實際上是socket,而socket是支援雙向傳輸的,因此,我們完全可以通過修改thrift本身實現雙向傳輸。有興趣的讀者可參考:
JXTA 雙向通訊
jxta 雙向通訊 可以通過 jxtaserversocket jxtasocket和 jxtaserverpipe jxtabidipipe 來實現 其實現的過程非常的類是我們做ftp的時候所採用的serversocket socket機制,也就是服務斷監聽客戶端連線的原理。以jxtaserver...
無名管道雙向通訊linux
基礎知識 1.linux中一種簡單且使用頻繁的程序間通訊方式 2.一種特殊的管道檔案,只存在於記憶體中,不使用外存 3.管道是單向的 先進先出的 無結構的 固定大小的位元組流 4.寫程序在管道的尾端寫入資料,讀程序在管道的首端讀出資料 資料讀出後將從管道中移走 5.管道的流控制機制 程序試圖讀空管道...
初探Remoting雙向通訊(四)
原 2013年06月26日 11 11 32 喜歡特別冷的冬天下著雪 閱讀數 2632 之前已經從基本原理上實現了remoting的雙向通訊。準備將其移植到我的專案中,不過為了成功移植,我還是需要再把以前的版本稍作修改才能放心的去做。專案中當一台機子中有工作人員進行了預警資訊標記時 在地圖上會有乙個...