我用Thrift框架編寫了一個客戶端服務器程序,因爲服務器是用C#編寫的,而客戶端是用Java.My的問題是,我該如何發送消息使用Thrift的聽衆?例如,我的程序有一個列表,表示服務器在連接到每個客戶端時發送給每個客戶端。如果我有三個客戶端連接到服務器,並且其中一個客戶端修改了該列表(在服務器啓動之前聲明),那麼如何通知其他客戶端該列表已被修改?Thrift:發送一條消息給所有連接到服務器的客戶端
謝謝。
我用Thrift框架編寫了一個客戶端服務器程序,因爲服務器是用C#編寫的,而客戶端是用Java.My的問題是,我該如何發送消息使用Thrift的聽衆?例如,我的程序有一個列表,表示服務器在連接到每個客戶端時發送給每個客戶端。如果我有三個客戶端連接到服務器,並且其中一個客戶端修改了該列表(在服務器啓動之前聲明),那麼如何通知其他客戶端該列表已被修改?Thrift:發送一條消息給所有連接到服務器的客戶端
謝謝。
問題一直asked在多次各種方式。周圍還有at least one yet unsolved JIRA ticket。
一般的答案是在這個時候,鑑於目前的現狀是:沒有內置的方式,但確實有一些可行的替代方案:
選項#1:人們可以使用長輪詢或類似機制來模擬它。當客戶住在瀏覽器中時,這特別方便。
選項#2:如果客戶端不是生活在一個瀏覽器,推薦的方法是讓客戶開始自己的儲蓄服務器,使服務器創建一個連接返回到客戶端。
選項3:關於@ Rui的評論:Thrift是一個序列化和RPC框架。這提供了僅使用序列化部分的選項,並以不同方式傳輸消息,即使在Thrift RPC之外也是如此。我們用消息總線系統做到了這一點,並且效果很好。
既然你的服務器是在C#中,你可以嘗試使用SignalR: https://www.codeproject.com/Articles/633378/ASP-NET-SignalR-Basis-Step-by-Step-Part
其他更難治的方法是直接用插口 https://msdn.microsoft.com/en-us/library/w89fhyex(v=vs.110).aspx
可能值得一提的是,這兩者都不涉及Thrift,但這些當然是絕對有效的解決方案。決定他們是否適用於OP。 – JensG
選項2看起來像我正在尋找的。非常感謝你 :) – Artyomska