关于这个主题找不到任何东西。

我有一个Windows TCP C ++服务器应用程序,我想不时更新。


据您显然,这引入了问题 - 从用户的角度来看,服务器应为24/7。
更新时,还希望保持当前与用户的TCP连接。


我一直在考虑一个类似模块的系统,因此例如,插座处理模块将位于“ sockets.dll”中,服务器的逻辑将位于“ logic.dll”中。
采取这种方法似乎打开潘多拉的盒子。
- 如何使模块的实际“交换”?想象一下,X工作线程不断将数据从一个模块发送到另一个模块 - 交换时,我需要(快速快速)停止/暂停它们;信号也许?
- 协议版本,甚至功能签名在更新时可能会更改。如何处理?
- 其他问题,例如未注意到的逻辑错误。
- 谁知道其他问题将会出现。


除上述内容外,我还担心如何更新10个服务器?我的意思是,它们都相互联系,交流。
如果更新引入了协议修改,则可能会引起巨大的问题,在这种情况下,我需要更新整个(服务器)的整个集群。关闭整个操作?听起来根本不正确!我怎么做?我在这里缺少哪个概念,我该如何学习/他们?


我有什么能做的吗?
你会怎么办?你做了这样的事情吗?
您知道解决问题的任何机制/文章/project/source-example/etc'吗?

任何有价值的建议都是高度应用的!

有帮助吗?

解决方案

在协议更改方面,我建议您版本您的协议。在参与服务器之间的连接开始时,具有启动器或接收器(我认为这真的没关系)宣布其理解的协议的最新版本,然后另一侧以实物做出响应。他们回到他们的最新版本 两个都 理解。

是的,这意味着一段时间内维护两个协议版本的代码,但是一旦知道,您就可以退休旧代码 全部 您的服务器已更新并使用新协议。

假设您也可以控制所有可能的客户端软件,则可以与客户同样做。当然,如果您无法控制用户何时升级,则可能需要更长的时间维护旧协议代码。

其他提示

这是一个想法:

  • 旧版本下载更新并启动。
  • 旧版本通过将新连接转发到更新的版本(在其他端口上听)来停止接受新连接。
  • 旧版本以其连接完成后关闭。
  • 新版本检测旧版本退出和交换端口。

基本上,这个想法是同时运行两个版本。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top