高信頼性トランザクション/シグナルコピー機 (アイデア検討・開発) - ページ 7

 

OKです。 そこで、作業モデルとしてソケット接続を提案します。

Схема работы синхронизатора:

- サーバーは、クライアントとの永久的なソケット接続を作成します(各クライアントに独自のスレッドを割り当てる問題は、まだ検討中です)。
- マスタークライアントが、トレードイベント中に自分のオーダーの現在の状態を送信する。
- サーバーはこのファイルを保存し、他のすべてのクライアントに直ちに送信します(ソケット接続が既に確立されています)。
- クライアントがファイルを受信し、受信したデータに応じてオーダー状態を変更する場合
- また、新規クライアント接続時には、ウィザードの最後に保存されたファイルがクライアントに送信されます。(初期同期用)

このシステムの最大のメリットは、トラフィックの節約 にあります。
- クライアントから常に要求されることはありません。サーバーから受信可能な状態で受信します
- 同様に、マスタークライアントは、変更が検出されたときのみデータを送信します

接続損失時の保護
- クライアントは5秒ごとにハートビート・パケット(例:2バイト)を送信し、サーバーとの通信をチェックする。
- パケット送信が失敗した場合(アンサーなし)、クライアントは接続を再初期化します。
- サーバーも同様です。 10秒以内にクライアントから応答がない場合は、ソケット接続を終了する。


この接続によるデメリットはありますか?
- 例:使用可能なソケットの最大接続数は?
 
sergeev:

接続損失時の保護
- クライアントは5秒ごとに "ハートビート "パケット(例:2バイト)を送信し、サーバーとの通信をチェックする

TCP/IPトランスポートプロトコルで通信する場合は、ソケット層で、つまりオペレーティングシステムによって自動的に通信が維持されるため、このようなことは決して起こらない。接続が切断された場合、クライアントで例外がスローされ、そのハンドラはそのような場合に何をすべきか正確に指定する必要があります。サーバーとしては、クライアントが切断された場合、それはすでにクライアントの問題であるため、どうでもいいのです。

セルゲイ


- 例:使用可能なソケットの最大接続数は?
1つのIPアドレスの1つのホストに対して、最大65536ポートを使用することができますが、そのうちのいくつかはすでに他のインターネット接続によって占有されていることになります。また、1つのポートは常にサーバーソケットがリッスン用に占有しています。
 
Reshetov:

接続が切断され、クライアントで例外が発生した場合、そのハンドラで例外を発生させる必要があります

どの例外のことをおっしゃっているのですか?
WS2_32.dllのことです。 通常のBerkeleyソケット(ただし非同期型)。そこに例外は見当たりませんでした。送受信を試みて初めてクラッシュを検出することができます。

1つのホストで1つのIPに使用できるポートは最大65537個で、そのうちのいくつかはすでに他のインターネット接続でビジー状態になっているはずです。
まあ、ポートは1つでいいんですけどね。
このポートにいくつのソケット接続が可能か?
 
sergeev:

どの例外のことをおっしゃっているのですか?
WS2_32.dllのことです。 通常のBerkeleyソケット(ただし非同期版)。そこに例外は見当たりませんでした。送受信を試みて初めてクラッシュを検出することができます。

まあ、ポートは1つでいいんですけどね。
このポートに接続できるソケットの数は?

接続は1ポートにつき1回のみです。クライアントが接続するためには、サーバーに割り当てられているIPとポート番号を知る必要があります。また、IPの代わりにドメイン名を指定すると、ソケットがDNSでIPアドレスに解決してくれます。

サーバーのソケットは、クライアントからの接続のために、まさにこのポート番号をリッスンします。クライアントが接続すると、ソケットは空きポートのプールから別のポートを与え、接続を維持する。その後、持続的なポートは再び解放され、他のクライアントからの接続を待ち受ける。

TCP/IPトランスポートプロトコルの接続はこうして行われる。これはすべてソケット層で行われます。つまり、プロトコルをプログラムする必要はなく、標準的なものであり、オペレーティングシステムの共有ライブラリにすでに組み込まれているのです。

 
かいはつもの
ファイル:
kopir.zip  397 kb
 
Reshetov:
クライアントが接続すると、ソケットは空きポートのプールから別のポートを 割り当て、恒久的に接続を維持する。

Yuriさん、基本はありがとうございます、でも場違いです。 間違った知識を与えている

そして、割り当てられたものは全くナンセンスです、すみません。 もしかしたら、2つの異なるハイポステーシスでポートコンセプトを適用しているかもしれませんが、それなら受け入れられたコンセプトで仕事をしたほうがいいですよね。

 
SEVER11:
かいはつもの

ありえない。プロらしくない。
 
sergeev:


そして、ハイライトされたものはナンセンスです、すみません。 もしかしたら、ポートの概念を2つの異なる装いで適用しているのかもしれませんが、それなら受け入れられた概念で作業したほうがいいでしょう。

よく言われるように、ポートの概念をどう適用するかは、自分自身の問題なのです。TCP/IPプロトコルでポートがどのように使われるかを説明しただけです。繰り返しになりますが、このプロトコルは標準的なものであり、私が発明したものではありません。

私が発明したわけではありません。

がんばってください。

 
sergeev

ネットワークの規模は、1000-1000、100-1000、10-1000、1-1000の順で、クライアントは何人くらいを想定しているのでしょうか。

なぜなら、あなたのサーバーは何千人ものクライアントで本当に倒産してしまうからです。

 
Urain:

ネットワークの規模は、1000-1000、100-1000、10-1000、1-1000の順で、クライアントは何人くらいを想定しているのでしょうか。

なぜなら、あなたのサーバーは何千ものクライアントで本当に倒産してしまうからです。


そこがポイントです。 総合的に考えようと思っています。もちろん、最初は拡張性を重視した入れ方をしなければなりません。つまり、1,000h分と同じだけの量をこなすことが目標です。しかも、後から使う人が数人しかいなくても問題ないのです。

だから今は、スピードとマイクロトラフィックとソケットのどちらかを選んで決めようとしています。またはhttpと情報の新しい部分のためのクライアントの一定の追跡上の多くのトラフィック。