我正在尝试在同一地址上的两个独立 HttpListener 实例之间无缝切换。目前,在停止实例 1 和启动实例 2 后有几秒钟的停机时间(用户会得到 404)(显然,如果实例 2 在实例 1 关闭之前启动,我会得到经典的“已经注册到 http .sys”错误)。
关于如何在同一地址上无缝切换(无需停机)有什么想法吗?
最佳答案
这里的经典答案是外部负载均衡器,例如 HAProxy,它可以在多台机器、进程、端口、主机等之间分配负载。例如,即使在一台机器上,您也可以在不同的端口上有两个实例(与客户端认为它们正在联系的内容无关),并通过 HAProxy 将负载切换到它们。这会自动处理所有端口/主机重新映射。
如果您想要单个进程(例如服务),那么这里的一个技巧是使用 AppDomain:
- 我们的服务是一个仅处理 http 的 shell,但通过...处理请求
- ... 一个 MarshalByRefObject,它是子 AppDomain 中真实对象的代理 ...
- ...您可以在需要升级时即时创建,只需在新域准备就绪时交换代理实例...
- ...然后卸载过时的 AppDomain
有点困惑(您需要担心为每个版本的应用程序创建临时位置等),但可能非常有效。
关于c# - HttpListener - 在没有停机的情况下在同一地址上无缝启动/停止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10690751/