問題タブ [latency]
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.
c# - C# ソケットの異常なレイテンシ
私は、C# と XNA を使用して、小さなオンライン マルチプレイヤー ポン ゲームに取り組んでいます。
ソケットを使用して、個人用 LAN 上の 2 台のコンピューター間でデータを転送しています。それは正常に動作します。
問題は速度にあります。転送が遅いです。
2 番目のコンピューターに ping を実行すると、2 ミリ秒の遅延が示されます。コード内に小さなタイマーを設定すると、約 200 ミリ秒のレイテンシーが表示されます。サーバーとクライアントが同じコンピューター (127.0.0.1 を使用) にある場合でも、遅延は約 15 ミリ秒です。これは遅いと思います。
ここに私のコードの一部があります:
ClientAccepted で、NetworkStream、StreamReader、および StreamWriter をセットアップしました。これは、プレーヤーの場所を更新したいときにメッセージを送信する方法です。
EndUpdate が行う唯一のことは、EndWrite を呼び出すことです。これは私がデータを受け取る方法です:
2 番目のスレッドにあるため、ゲームをブロックしません。
これらは私が試したものです: - TCPの代わりにIPを使用してください - テキストの代わりにバイナリメッセージを使用してください - IPv4の代わりにIPv6を使用してください 本当に何も役に立ちませんでした.
レイテンシーを改善する方法について何か考えはありますか?
ありがとうございました
performance - ユーザーエクスペリエンスを推定するための単純な帯域幅/遅延テスト
Web ベースのアプリケーションを作成します。パフォーマンスは明らかに重要な要素です。データベースの負荷とページのレンダリング時間は制御できますが、ユーザーのインターネット接続は制御できません。
私が探しているのは、ユーザーがどのような接続を持っているかを示す方法です。Web サイトの隅にある信号機のようなもので、ユーザーがサイトにどのような接続を持っているかを示し、ユーザーが期待するパフォーマンスの種類を示します。たとえば、会社の他の全員が昼休みに Facebook を閲覧しているため、アプリが遅く見えるだけかもしれません。
私の最初の考えは、これは、ページの読み込みごとに実行される JavaScript によって実現できるということです。
理想的には、コードは非常に「ドロップ可能」であり、実装するために大きなコードやインフラストラクチャの変更を必要としません。
c++ - C++ でホストからレイテンシを取得する
C++ を使用して、コマンド/クラスを使用して、ホストへの ping からの待ち時間を取得し、プログラムで使用したいと考えています。pingコマンドを使ってみたのですが、他の統計情報と一緒に時間を集計するのは簡単ではありませんでした。私はより簡単なアプローチを望んでいました。
javascript - ブラウザを介してリモート サーバーの遅延を判断する方法
いくつかのゲーム トンネリング サーバーを実行していますが、クライアントがすべてのサーバーに対して ping を実行し、最も応答性の高いサーバーを見つけられるページが必要です。私が見る限り、JavaScript でこれを行う適切な方法はないようですが、フラッシュまたは他のクライアント ブラウザ テクノロジでこれを行う方法を知っている人はいますか?
tcp - インターネット経由で時計を同期する
独自のプロトコルを使用して、2 台の専用コンピューター間でインターネット経由でリアルタイムに重要なデータを送信しています。
もちろん、遅延が関係しています。
デバッグと最適化のために、両方のコンピューターで同じタイムベースを使用するのが好きです。つまり、遅延をより適切に判断できるように、時計の時差を知る必要があります。
もちろん、相対主義などで完全に同期することはできませんが、できるだけ近づけたいと思っています。
NTP だけに頼るだけでは十分ではないようです。私の経験では、クロックが 0.5 秒ずれることがあります (明確化: これまでのところ、Apple が提供するデフォルトのものに頼っていました)。
少なくとも 1/10 の範囲の精度が必要です。2 台のコンピューターが離れすぎていることはありません。通常、ICMP の ping 時間は 100 ミリ秒未満です。
これを行う方法について何か提案はありますか?
(現在、関連するマシンは OS X を実行しているため、それらのマシンだけの解決策を知っていれば、それが出発点になります)
java - Java で小さなパケットを使用するようにソケットを構成する
非常に低速なネットワーク接続を介してルーティングされるタイム クリティカルなメッセージを処理しています。Java TCP/IP ソケットを使用して元のサーバー (制御できない) に接続しています。データの長さはさまざまですが、通常は約 5000 バイトであるため、最終的には約 1400 バイトの複数のパケットに分割されます。
Java クライアント側コードで、データの送信に使用されるパケットのサイズを制御できる方法はありますか? 500 バイト パケットなど、より小さなパケット サイズを明示的に使用して実験したいと思います。これにより、ヘッダー オーバーヘッドの増加という (考えられる) コストで、メッセージの最初のバイトを受信するのにかかる時間が短縮されます。
c# - プログラムでtelnet接続の遅延に対処するには?
TcpClient クラスを利用して telnet 接続を実装します。私が知らないのは、応答の終わりを決定する方法です。DataAvailable プロパティが true になると、Stream からデータを読み取り、DataAvailable が一時的に false に設定され、バッファが別のデータのチャンクで満たされているようですが、すべて読み取られて消えると思います。すべての応答が読まれたことを確認するにはどうすればよいですか?
以下のコード スニペットを変更して、これを正しく機能させる方法を教えてください。応答全体を取得するのに十分な時間があるため、コードをステップ実行すると正しく動作します。あなたの助けに感謝。
http - レイテンシーを最小限に抑えるために、IISを使用してHTTP経由でマルチプレイヤーゲームデータをトンネリングする方法は?
ブラウザベースのネットワークゲームを作りたいです。できるだけ多くの人が利用できるように、すべてのトラフィックを標準のHTTPパッケージに埋め込みたいと思います。
IISをバックエンドとして使用しているとすると、遅延を最小限に抑えるためにこれをどのようにコーディングする必要がありますか?
メモリ内の共有状態を使用するある種のASPアプリケーション(おそらくASP.NET MVC)から始めるのは合理的ですか?それとも、最初から自分のIISプラグインの作成を計画する必要がありますか?または、IISを放棄して、代わりにカスタムサーバーを作成する必要がありますか?
各クライアントが1秒間に10回など、繰り返しクエリを実行することから始めるのは合理的ですか、それとも何らかの方法で(もしそうならどのように)データをよりストリームのようにする必要がありますか?
c# - C#でサーバーとクライアント間の遅延を取得するにはどうすればよいですか?
私はActionScript3で書いているゲームエンジン用のC#サーバーアプリケーションに取り組んでいます。不正行為を防ぎ、公正なゲームを保証するために、信頼できるサーバーモデルを使用しています。これまでのところ、すべてがうまく機能しています:
クライアントが移動を開始すると、サーバーに通知し、ローカルでレンダリングを開始します。次に、サーバーは、クライアントXが移動を開始したことを他のすべてのユーザーに通知し、詳細を含めて、レンダリングも開始できるようにします。クライアントが移動を停止すると、サーバーに通知します。サーバーは、クライアントが移動を開始した時間に基づいて計算を実行し、クライアントはティック遅延をレンダリングして全員に応答するため、正しい値で更新できます。
重要なのは、サーバーの計算でデフォルトの20ミリ秒のティック遅延を使用する場合、クライアントがかなり長い距離を移動すると、停止したときに顕著な前方への傾きが発生することです。遅延を22msに少し増やすと、ローカルネットワークではすべてが非常にスムーズに実行されますが、他の場所では、傾きはまだあります。少し実験した後、必要な追加の遅延は、クライアントとサーバー間の遅延にほぼ関係していることに気付きました。私はそれを非常にうまく機能する式に要約しました:delay = 20 +(latency / 10)。
では、特定のクライアントとサーバーの間の遅延を取得するにはどうすればよいでしょうか(非同期ソケットを使用しています)。サーバーの実行速度が低下しないように、CPUの労力はそれほど大きくありません。また、これは本当に最良の方法ですか、それともこれを行うためのより効率的で簡単な方法がありますか?