問題タブ [client-server]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
5 に答える
17105 参照

c# - C#でサーバーとクライアント間の遅延を取得するにはどうすればよいですか?

私はActionScript3で書いているゲームエンジン用のC#サーバーアプリケーションに取り組んでいます。不正行為を防ぎ、公正なゲームを保証するために、信頼できるサーバーモデルを使用しています。これまでのところ、すべてがうまく機能しています:

クライアントが移動を開始すると、サーバーに通知し、ローカルでレンダリングを開始します。次に、サーバーは、クライアントXが移動を開始したことを他のすべてのユーザーに通知し、詳細を含めて、レンダリングも開始できるようにします。クライアントが移動を停止すると、サーバーに通知します。サーバーは、クライアントが移動を開始した時間に基づいて計算を実行し、クライアントはティック遅延をレンダリングして全員に応答するため、正しい値で更新できます。

重要なのは、サーバーの計算でデフォルトの20ミリ秒のティック遅延を使用する場合、クライアントがかなり長い距離を移動すると、停止したときに顕著な前方への傾きが発生することです。遅延を22msに少し増やすと、ローカルネットワークではすべてが非常にスムーズに実行されますが、他の場所では、傾きはまだあります。少し実験した後、必要な追加の遅延は、クライアントとサーバー間の遅延にほぼ関係していることに気付きました。私はそれを非常にうまく機能する式に要約しました:delay = 20 +(latency / 10)。

では、特定のクライアントとサーバーの間の遅延を取得するにはどうすればよいでしょうか(非同期ソケットを使用しています)。サーバーの実行速度が低下しないように、CPUの労力はそれほど大きくありません。また、これは本当に最良の方法ですか、それともこれを行うためのより効率的で簡単な方法がありますか?

0 投票する
4 に答える
3783 参照

python - Python でバイナリ データを転送するにはどうすればよいですか?

私は初めてクライアント サーバー プログラムに取り組んでいますが、自分がやっていることをどこから始めればよいのか、ひどく不十分だと感じています。

Google Protocol Buffersを使用して、クライアントとサーバーの間でバイナリ データを転送します。Python バリアントを使用します。私が理解しているように、基本的な考え方は、クライアントがデータをシリアル化してサーバーに送信し、サーバーがデータを逆シリアル化するというものです。

問題は、バイナリ データをサーバーに送信するためにどこから始めればよいか本当にわからないことです。HTTP リクエストのような「単純な」ものになることを望んでいましたが、バイナリ データを転送する方法を Google で検索し、膨大な数のチュートリアル、ガイド、ドキュメントで迷子になりました。HTTP 転送を調査しても、間違ったツリーを鳴らしているかどうかさえわかりません (私はそれを使用したいと思っていたので、セキュリティが必要な場合は HTTPS にノッチアップできます)。ただし、ソケットプログラミングのレベルに行く必要はありません。それを行う前に、利用可能なライブラリを使用したいと思います。(私は標準の Python ライブラリも好みますが、完璧なサード パーティのライブラリがあれば生きていきます。)

したがって、Python を介してバイナリ データを転送するための適切な方法について、適切な出発点を誰かが持っている (または自分で少し説明したい) 場合は、感謝します。ちなみに、私が実行しているサーバーは現在mod_pythonでApacheを実行しています。

0 投票する
3 に答える
640 参照

.net - クライアント/サーバー プログラムの設計、設計問題 (.Net)

クライアント/サーバー プログラムを設計していますが、設計上の決定について助けが必要です。

プログラムのサーバー側は、多数の Windows サーバー上でサービスとして実行され、サービスはこれらのサーバーを監視し、必要に応じてレポートを電子メールで送信します。

クライアントは、サーバー上で実行されているサービスを制御および管理するために使用されますが、常に実行されているわけではありません。

私の質問は、サービスの構成をどこにどのように保存する必要があるかです。設定 (smtp など) はクライアントで定義されますが、リモート サーバー (多数存在する可能性があります) で実行されているサービスは、設定で更新する必要があり、再度更新されるまでそれらの設定を保持する必要があります。

サービスが設定を読み取る中央の Windows 共有、またはクライアントが [保存] をクリックすると、設定が各サーバー上の場所に保存されるという 2 つのオプションが考えられます。

あなたならどうしますか?知っておくべきことはありますか?

ありがとう

0 投票する
4 に答える
264 参照

c - ソケット: 最後のバイトを受信した後も待機しているクライアント

Cでクライアント/サーバープログラムを使用して、サーバーからクライアントにファイルを転送しています。

しかし、クライアントはファイルの最後のバイトを受信した後でも recv を待っています。クライアントを強制終了するか、サーバーを強制終了した場合にのみ、クライアントが終了します。ただし、サーバーは他のクライアントの要求を楽しませる必要があるため、ループに入る必要があります。

サーバーで使用fork()して、各クライアントのリクエストを楽しませています。クライアントの要求が受け入れられた後、子プロセスを終了していますが、クライアントはサーバー プログラム全体が強制終了された場合にのみ終了します。

サーバーの子が終了したときにクライアントが終了しないのはなぜですか?

サーバー コードはここに、クライアント コードはここに表示されます。

0 投票する
8 に答える
5452 参照

c# - なぜサーバー上のJavaとクライアント上のC#が人気のある選択肢なのですか?

サーバー側にJavaがあり、クライアント側にc#があるアーキテクチャの例をいくつか見てきましたが、この組み合わせが非常に優れている理由は何ですか?なぜ両側の.netがより良い選択ではないのでしょうか(または実際には、両側のjavaですか?)

後で追加:多くの場合、JavaはWindowsサーバー自体でホストされていますが、Tomcat経由だと思います(100%確実ではありません)-ここでの動機は何ですか?

0 投票する
12 に答える
3715 参照

java - クライアントサーバーアーキテクチャアプリケーションのパフォーマンスを向上させる方法は?

クライアントサーバーアーキテクチャに基づいて構築された製品があります。使用されているテクノロジースタックに関する詳細。

  • クライアント-JavaSwing
  • サーバー-RMI
  • Javaデータベース-Oracle

クライアントは世界のさまざまな場所にありますが、JavaサーバーとOracleデータベースはスウェーデンの同じマシンにあります。このため、多くのネットワーク遅延があります。離れた場所にいるクライアントのパフォーマンスはひどいです。このアプリケーションは、50MBを超えるサイズのファイルを処理するために使用されます。一般に、各操作には約1000を超えるネットワーク呼び出しが必要です。

あなたの経験に基づいて、この問題にどのように取り組み、パフォーマンスを向上させますか?

編集:いくつかの質問に答える

  1. ファイルには、処理およびデータベースへの更新が必要な実際のビジネスデータが含まれており、一部を送信することはできません。
  2. 一部のネットワーク呼び出しはバッチ処理できますが、コードの大幅なリファクタリングが必要になります。これは2001年に作成された非常に古いアプリケーションです。アプリケーションの設計は、サーバーがすべてのサービスを保持し、コード全体で再利用可能になり、ビジネスロジックがクライアント側で作成されるようになっています。したがって、このビジネスロジックはサーバーを何度も呼び出すため、天文学的な数字になります。

-Snehal

0 投票する
2 に答える
489 参照

client-server - サーバー上のリストを多くのクライアントと同期する方法は?

多くのテーブルをホストするポーカー ゲーム サーバーを考えてみましょう。プレーヤーがロビーにいる間、すべてのアクティブなテーブルとその統計のリストがあります。これらの統計は、プレイヤーがテーブルに参加、プレイ、退出するたびに常に変化します。テーブルを追加して閉じることができます。何らかの方法で、これらの変更をクライアントに通知する必要があります。

この機能をどのように実装しますか? ロビーに TCP/UDP を使用しますか (つまり、ユーザーがロビーを監視するためにサーバーに接続する必要がありますか、それとも要求応答メカニズムを使用しますか)? サーバーは各イベントについてクライアントに通知しますか、それともクライアントはサーバーをポーリングする必要がありますか?

心に留めておいてください: おそらく、そのようなシステムの最も重要な目標はスケーラビリティです。すべてのユーザーが複数のサーバーから構成される 1 つの大きなリストを表示する必要がある一方で、増加する視聴者に対処するためにサーバーを追加するのは簡単である必要があります。

0 投票する
4 に答える
977 参照

django - セッションの期限切れについてクライアントに通知する - Web プログラミング

セッションの有効期限が切れたことをユーザーに通知できますか? ブラウザはサーバーとして機能し、そのような通知を受け取ることができますか?

1 つの解決策は、クライアント側でカウントダウンを行い、最後にクライアントに通知する JavaScript を生成することですが、最初の方法でそれを実行できるかどうかを確認しますか?

そして、最初のアプローチの結果は何ですか?セキュリティ上の懸念はありますか?

たとえば、django でポーズ可能な実装とは何でしょうか?

0 投票する
1 に答える
272 参照

java - 最も近い RMI サーバーにルーティングする方法は?

私の質問の続きで、クライアント サーバー アーキテクチャ アプリケーションのパフォーマンスを向上させる方法

集中型データベースといくつかのスレーブ サーバー データベース構成を維持することにしました。スレーブ データベースとマスター データベース間のレプリケーションにSymmetric DSを使用する予定です。各サーバー データベース構成は、クライアントの近くにインストールされます。理想的には、明らかな理由から、クライアントからのリクエストを最も近いスレーブサーバーデータベースにルーティングする必要があります。サーバーへの接続に RMI を使用しているため、現在利用可能な製品/API があるかどうかを知りたいのですが、これで解決できますか?

上記以外のソリューションは高く評価されています:)

注: クライアント コードのリファクタリングは間違いなく 1 つの代替手段ですが、アプリケーションが非常に大きいため、大きなリスク (既存のコードが破損する可能性がある)、時間と費用がかかります。