HttpListener - 在同一地址上无缝启动/停止,无需停机

本文关键字:启动 停止 停机 HttpListener 地址 | 更新日期: 2023-09-27 18:35:04

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

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

HttpListener - 在同一地址上无缝启动/停止,无需停机

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

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

  • 服务我们是一个外壳,只处理HTTP,但通过...
  • 。一个 MarshalByRefObject 它是子 AppDomain 中真实对象的代理......
  • 。您可以在需要升级时即时创建,只需在新域准备就绪时交换代理实例即可......
  • 。然后卸载过时的应用程序域

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