【发布时间】:2017-05-06 18:32:20
【问题描述】:
我使用 Thrift 框架编写了一个客户端服务器程序,因为服务器是用 C# 编码的,而客户端是 Java 的。我的问题是,如何使用 Thrift 制作消息监听器?例如,我的程序有一个列表,当一个客户端连接到它时,服务器会发送给每个客户端。如果我有三个客户端连接到服务器,其中一个修改了该列表(在服务器启动之前声明),我如何通知其余客户端该列表已修改?
谢谢。
【问题讨论】:
我使用 Thrift 框架编写了一个客户端服务器程序,因为服务器是用 C# 编码的,而客户端是 Java 的。我的问题是,如何使用 Thrift 制作消息监听器?例如,我的程序有一个列表,当一个客户端连接到它时,服务器会发送给每个客户端。如果我有三个客户端连接到服务器,其中一个修改了该列表(在服务器启动之前声明),我如何通知其余客户端该列表已修改?
谢谢。
【问题讨论】:
这个问题已经以各种方式多次asked。周围还有at least one yet unsolved JIRA ticket。
鉴于目前的现状,目前的一般答案是:没有内置方式,但确实有一些可行的替代方案:
选项#1:可以使用长轮询或类似机制来模拟它。当客户端使用浏览器时,这尤其方便。
选项#2:如果客户端不在浏览器中,推荐的方法是让客户端启动自己的 Thrift 服务器,允许服务器创建与客户端的连接。
选项 #3: 关于@Rui 的评论:Thrift 既是序列化框架,又是 RPC 框架。这提供了仅使用序列化部分并以不同方式传输消息的选项,即使在 Thrift RPC 之外也是如此。我们使用消息总线系统做到了这一点,并且效果很好。
【讨论】:
由于您的服务器是 C#,您可以尝试使用 SignalR: https://www.codeproject.com/Articles/633378/ASP-NET-SignalR-Basis-Step-by-Step-Part
其他更难的方式是直接使用Sockets: https://msdn.microsoft.com/en-us/library/w89fhyex(v=vs.110).aspx
【讨论】: