2

我正在尝试在同一地址上的两个独立 HttpListener 实例之间无缝切换。目前,在停止实例 1 并启动实例 2 之后(显然,如果实例 2 在实例 1 关闭之前启动,我会得到经典的“已经注册 http .sys”错误)。

关于如何在同一地址上无缝切换(不停机)的任何想法?

4

1 回答 1

1

这里的经典答案是外部负载均衡器,例如 HAProxy,它在多台机器、进程、端口、主机等之间分散负载。例如,即使在一台机器上,您也可以在不同的端口上有两个实例(与客户端认为他们正在联系的内容无关),并通过 HAProxy 将负载切换到它们。这会自动处理所有端口/主机重新映射。

如果您想要单个进程(例如服务),那么这里的一个技巧是使用 AppDomain:

  • 我们的服务是一个只处理http的shell,但通过...处理请求
  • ... MarshalByRefObject,它是子 AppDomain 中真实对象的代理 ...
  • ...您可以在需要升级时即时创建,只需在新域准备好时交换代理实例...
  • ...然后卸载过时的 AppDomain

有点混乱(您需要担心为每个应用程序版本创建临时位置以执行等),但可能非常有效。

于 2012-05-21T18:51:59.677 回答