代码之家  ›  专栏  ›  技术社区  ›  Poni

一个C++服务器应用程序的在线更新机制

  •  1
  • Poni  · 技术社区  · 15 年前

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

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


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


    我一直在考虑像系统这样的模块,例如,套接字处理模块将驻留在“socket s.dll”中,服务器的逻辑将驻留在“logic.dll”中。
    采用这种方法就像打开潘多拉的盒子;
    -我将如何进行模块的实际“交换”?假设X工作线程不断地将数据从一个模块发送到另一个模块-在交换时,我需要一种(轻&快)方法来停止/暂停它们;可能是信号?
    -协议版本,甚至函数签名在更新时可能会更改。如何处理?
    -其他问题,如未注意到的逻辑错误。
    -谁知道会有什么其他的问题。


    除了上述问题,我还担心如何更新,比如说10台服务器?我的意思是,他们都互相联系,交流。
    如果更新引入了一个协议修改,它可能会导致巨大的问题,在这种情况下,我需要更新整个集群(服务器)作为一个整体;关闭整个操作?听起来不太对劲!我该怎么做?我在这里遗漏了哪些概念,如何学习它们?


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

    任何有价值的建议都是很贴切的!!

    2 回复  |  直到 15 年前
        1
  •  0
  •   Michael Scott Shappe    15 年前

    在协议更改方面,我建议您修改协议。在参与服务器之间的连接开始时,让发起者或接收者(我认为这并不重要)宣布它所理解的协议的最新版本,然后另一方做出相应的响应。他们回到最新版本 二者都 理解。

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

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

        2
  •  1
  •   Nathan Osman    15 年前

    这里有一个想法:

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

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

    推荐文章