1

このトピックについて何も見つかりませんでした。

時々更新したいWindowsTCPC++サーバーアプリケーションがあります。


あなたが明らかに理解しているように、これは問題を引き起こします-サーバーはユーザーの観点から24時間年中無休である必要があります。
更新するときは、ユーザーとの現在のTCP接続を維持することも望まれます。


私はモジュールのようなシステムについて考えていたので、たとえば、ソケット処理モジュールは「sockets.dll」にあり、サーバーのロジックは「logic.dll」にあります。
このアプローチを採用することは、Pandoraのボックスを開くように見えます。
-モジュールの実際の「交換」をどのように行うのですか?Xワーカースレッドが1つのモジュールから別のモジュールにデータを送信し続けると想像してください。スワップするときは、それらを停止/一時停止するための(軽くて速い)方法が必要になります。多分信号?
-プロトコルバージョン、または関数のシグネチャでさえ、更新時に変更される可能性があります。それをどのように処理しますか?
-見過ごされている論理バグなどの他の問題。
-他の問題が発生することを誰が知っていますか。


上記に加えて、10台のサーバーを更新するにはどうすればよいですか?つまり、それらはすべて互いに接続され、通信しています。
更新によってプロトコルの変更が導入された場合、大きな問題が発生する可能性があります。そのような場合は、(サーバーの)クラスター全体を全体として更新する必要があります。操作全体をシャットダウンしますか?それはまったく正しく聞こえません!それ、どうやったら出来るの?ここで欠けている概念と、それをどのように学ぶのですか?


それについて私にできることはありますか?
あなたならどうしますか?あなたはそのようなことをしましたか?
問題を解決するメカニズム/記事/プロジェクト/ソース例/その他を知っていますか?

貴重なアドバイスは大歓迎です!!

4

2 に答える 2

1

ここにアイデアがあります:

  • 古いバージョンのダウンロードは更新をダウンロードして起動します。
  • 古いバージョンは、新しい接続を更新されたバージョン(別のポートでリッスンする)に転送することにより、新しい接続の受け入れを停止します。
  • 古いバージョンは、接続が終了するとシャットダウンします。
  • 新しいバージョンは、古いバージョンが終了してポートを切り替えるタイミングを検出します。

基本的には、両方のバージョンを同時に実行するという考え方です。

于 2010-09-12T00:56:25.103 に答える
0

プロトコルの変更に関しては、プロトコルをバージョン管理することをお勧めします。参加しているサーバー間の接続の開始時に、イニシエーターまたはレシーバーのいずれか(どちらでもかまいません)に、理解できる最新バージョンのプロトコルをアナウンスさせてから、反対側が現物で応答します。彼らは両方とも理解している最新バージョンにフォールバックします。

はい、これは両方のプロトコルバージョンのコードをしばらく維持することを意味しますが、すべてのサーバーが更新され、新しいプロトコルで動作していることがわかったら、古いコードを廃止できます。

考えられるすべてのクライアントソフトウェアを制御できると仮定すると、クライアントでも同じことができます。もちろん、ユーザーがいつアップグレードするかを制御できない場合は、古いプロトコルコードをより長く維持する必要があります。

于 2010-09-15T16:20:19.967 に答える