c ++ SERVER应用程序的在线更新机制

时间:2010-09-12 00:40:17

标签: c++ hotswap

无法找到有关此主题的任何内容。

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


正如您明白的那样,这引入了一个问题 - 从用户的角度来看,服务器应该是全天候的 更新时,还希望保持与用户的当前TCP连接。


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


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


我有什么可以做的吗? 你会怎么做?你做过这样的事吗? 你知道解决问题的任何机制/文章/项目/源代码/例子等吗?

任何有价值的建议都非常适合!!

2 个答案:

答案 0 :(得分:1)

这是一个想法:

  • 旧版本下载更新并启动它。
  • 旧版本通过将新连接转发到更新版本(侦听其他端口)来停止接受新连接。
  • 旧版本在完成连接时会关闭。
  • 新版本会检测旧版本何时退出并切换端口。

基本上,我们的想法是让两个版本同时运行。

答案 1 :(得分:0)

在协议更改方面,我建议您对协议进行版本控制。在参与服务器之间的连接开始时,要么是发起者还是接收者(我认为哪个并不重要)宣布它理解的协议的最新版本,然后另一方以实物形式做出响应。它们回归到他们理解的最新版本。

是的,这意味着暂时维护这两种协议版本的代码,但是一旦您知道服务器的所有更新并使用新协议,您就可以淘汰旧代码。

假设您可以控制所有可能的客户端软件,您也可以对客户端执行相同操作。当然,如果您无法控制用户何时升级,这可能需要更长时间地维护旧协议代码。