質問

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

Windows TCP C ++サーバーアプリケーションがあり、時々更新します。


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


私はモジュールのようなシステムについて考えてきたので、たとえばソケット処理モジュールは「sockets.dll」に存在し、サーバーのロジックは「logic.dll」に存在します。
このアプローチに行くと、パンドラの箱を開けるようです。
- モジュールの実際の「スワッピング」をどのように作成しますか? Xワーカーのスレッドがあるモジュールから別のモジュールにデータを送信し続けると想像してください。スワップするときは、それらを停止/一時停止するには(軽く速い)方法が必要です。信号は多分?
- プロトコルバージョン、または関数の署名が更新時に変更される場合があります。それを処理する方法は?
- 気付かれていないロジックバグなどの他の問題。
- 他の問題が発生することを誰が知っていますか。


上記に加えて、私は10個のサーバーを更新する方法などの懸念がありますか?つまり、それらはすべて互いにつながり、コミュニケーションをとっています。
更新がプロトコルの変更を導入した場合、それは大きな問題を引き起こす可能性があり、そのような場合は全体としてクラスター全体を更新する必要があります。操作全体をシャットダウンしますか?それはまったく正しく聞こえません!それ、どうやったら出来るの?ここではどのコンセプトが欠けていますか?どうすればそれを学ぶことができますか?


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

貴重なアドバイスは非常に評価されています!!

役に立ちましたか?

解決

プロトコルの変更に関しては、プロトコルのバージョンをお勧めします。参加サーバー間の接続の開始時に、イニシエーターまたは受信機(実際には問題ではないと思います)が、それが理解しているプロトコルの最新バージョンを発表し、反対側は種類で応答します。彼らは彼らの最新バージョンに戻ります 両方とも 理解する。

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

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

他のヒント

これがアイデアです:

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

基本的に、アイデアは両方のバージョンを同時に実行することです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top