gpt4 book ai didi

c# - 集群环境中的 WCF 双工通信

转载 作者:行者123 更新时间:2023-11-30 14:20:36 25 4
gpt4 key购买 nike

所以我查看了人们为双工通信创建的示例,即由 IIS 托管并通过 Silverlight 连接的示例。有很多这样的例子 ( this MSDN article is great ),但是所有都使用相同的范例:

用户 A 连接到服务器 A,服务器 A 将他放入内存列表中以接收 future 的更新。
用户 B 连接到服务器 A,它通知列表中的所有用户有人“登录”。

...但是当

用户C连接到服务器C,服务器C的内存列表不包含用户A或B。

问题是我希望在集群(网络场)环境中实现它。这使事情变得复杂,因为我无法验证哪台机器将结束 wcf 调用,因此很难将任何消息转发给所有其他用户。

我能想到的最佳方案是让客户端实际连接到某种路由服务,该服务接收传入请求并将客户端转发到特定机器。当然,那样我就失去了网络农场的好处,因为一台机器有效地处理了所有传入的请求。

一个不太有效的解决方案是让服务不断轮询某些内容(文件服务器上的文件或数据库中的表)以查找更改。一旦出现变化,将它们推送给客户。这看起来像一个非常丑陋的婴儿。

我错过了什么?

更新 - 路由系统无法满足我的需求。我的托管公司不允许我通过 IP 直接连接到农场中的特定机器。我只能连接到通用负载均衡器前端,因此不能保证我的用户最终会在同一台服务器上。

到目前为止,我们正在轮询数据库中的表以查找更改。看起来还是个丑宝宝。

最佳答案

假设您对环境的控制超出了您可以在每台服务器上安装的内容(即没有 MSMQ、没有 ESB 等),那么我会考虑使用 WCF 在服务器之间进行通信。简单的问题似乎是您有一个内存列表需要在两个服务器之间保持同步,并且每当列表的内容发生变化时,都需要通知两个服务器的用户。

通过服务器托管和使用的内部 WCF 服务,您可以使用简单的即发即弃消息传递来保持列表同步。想象一下以下场景:

  1. '用户 A' 登录到服务器 A
    1. 将“用户 A”添加到在线用户列表
    2. 向服务器 B 发送消息以通知它添加了“用户 A”
      1. 使服务器 B 将“用户 A”添加到其在线用户列表中
      2. 使服务器 B 通知所有用户用户登录
    3. 通知服务器 A 上的所有用户用户登录
  2. '用户 B' 登录到服务器 B
    1. 将“用户 B”添加到在线用户列表
    2. 向服务器 A 发送消息以通知它添加了“用户 B”
      1. 使服务器 A 将“用户 B”添加到其在线用户列表中
      2. 使服务器A通知所有用户用户登录
    3. 通知服务器 B 上的所有用户用户登录
  3. “用户 A”从服务器 A 注销
    1. 从在线用户列表中删除“用户 A”
    2. 向服务器 B 发送消息以通知它已删除“用户 A”
      1. 使服务器 B 从其在线用户列表中删除“用户 A”
      2. 使服务器 B 通知所有用户用户注销
    3. 通知服务器 A 上的所有用户用户注销
  4. 定期让服务器 A 和服务器 B 相互同步列表(可以实现 Ping-Pong 风格……一台服务器将其列表 ping 到另一台服务器,其他服务器合并和 pongs 合并列表返回)

上述场景显然假设您能够在托管服务器上安装 WCF 服务,以便它们可以相互通信。我不确定您是否有能力在每个服务器内部了解其他服务器,因为您提到所有流量都必须通过负载均衡器。

关于c# - 集群环境中的 WCF 双工通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1206510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com