这个问题的一部分是我什至不确定我到底需要问什么,所以我将从情况开始并从那里开始解决。
我正在进行的一个项目涉及通过 aspComet 库使用 COMET。该程序的用例有点像协作幻灯片。一个人运行大部分,一个或多个参与者能够执行某些操作。在屏幕上执行操作之间的低延迟
以前,它只在一台服务器上运行。现在,我们希望将其扩展一点,更多的是出于可靠性而不是性能原因。所以,我们在 Rackspace 的云中提供了一些盒子和所有有趣的东西。
从一开始我就知道我需要对 COMET 的工作方式进行一些更改,因为同一“节目”中的不同人可能在不同的服务器上,而我无法知道“节目”是什么他们属于直到他们已经到达现场之后。
我最初使用 WCF Mesh 提供程序解决了这个问题,一开始并没有很好的记录,现在我遇到了向它发送消息的问题,有时会丢失或延迟(我不是 100% 确定发生了什么那里),但是它搞砸了 COMET 的长轮询并以相当奇怪的方式破坏了事情(单击按钮可能会触发一个事件,或者它会挂起 10 秒 {long poll duration} 而实际上什么都不做)。
更多的研究使我相信 .Net 服务总线提供商之一可能会满足我的需求。但是,我找不到可以涵盖我需要的示例:
- 无单点故障(数据库外)
- 没有对等点的硬编码。
- 近实时(无轮询,最好基于事件)
我理想的解决方案是,当一台服务器启动时,它会让其他服务器知道它的存在(即使它只是某处表格中的一行),并且它们可以开始相互发送广播消息,每台服务器都是发布者和订阅者。这就是我在 WCF Mesh 提供程序中所拥有的,但我对该代码并不太自信。
谁能指出我正确的方向?在这一点上,即使是在服务总线提供商的文档中寻找合适的术语也会很好。还是服务巴士不是我想要的?在这一点上,我会满足于在每个 Web 服务器上设置一个 Jabber 服务器并使用它,如果它可以满足我的限制。