无法找到有关此主题的任何内容。
我有一个Windows TCP C ++服务器应用程序,我想不时更新。
正如您明白的那样,这引入了一个问题 - 从用户的角度来看,服务器应该是全天候的
更新时,还希望保持与用户的当前TCP连接。
我一直在考虑类似模块的系统,例如套接字处理模块将驻留在“sockets.dll”,服务器的逻辑将驻留在“logic.dll”中。
采用这种方法似乎打开潘多拉的盒子;
- 我将如何进行模块的实际“交换”?想象一下,X工作线程不断地将数据从一个模块发送到另一个模块 - 交换时我需要一种(快速和快速)方式来暂停/暂停它们;信号可能?
- 更新时,协议版本甚至功能签名可能会更改。如何处理?
- 其他问题,例如未被注意的逻辑错误
- 谁知道会出现其他问题。
除了上述内容,我还担心如何更新说10台服务器?我的意思是,他们都是相互联系的,沟通
如果更新引入了协议修改,则可能会导致巨大的问题,在这种情况下,我需要整个(服务器)整个集群更新;关闭整个操作?这根本听起来不对劲!我怎么做?我在这里缺少哪些概念以及如何学习它们?
我有什么可以做的吗?
你会怎么做?你做过这样的事吗?
你知道解决问题的任何机制/文章/项目/源代码/例子等吗?
任何有价值的建议都非常适合!!
答案 0 :(得分:1)
这是一个想法:
基本上,我们的想法是让两个版本同时运行。
答案 1 :(得分:0)
在协议更改方面,我建议您对协议进行版本控制。在参与服务器之间的连接开始时,要么是发起者还是接收者(我认为哪个并不重要)宣布它理解的协议的最新版本,然后另一方以实物形式做出响应。它们回归到他们都理解的最新版本。
是的,这意味着暂时维护这两种协议版本的代码,但是一旦您知道服务器的所有更新并使用新协议,您就可以淘汰旧代码。
假设您可以控制所有可能的客户端软件,您也可以对客户端执行相同操作。当然,如果您无法控制用户何时升级,这可能需要更长时间地维护旧协议代码。