私は、C# と XNA を使用して、小さなオンライン マルチプレイヤー ポン ゲームに取り組んでいます。
ソケットを使用して、個人用 LAN 上の 2 台のコンピューター間でデータを転送しています。それは正常に動作します。
問題は速度にあります。転送が遅いです。
2 番目のコンピューターに ping を実行すると、2 ミリ秒の遅延が示されます。コード内に小さなタイマーを設定すると、約 200 ミリ秒のレイテンシーが表示されます。サーバーとクライアントが同じコンピューター (127.0.0.1 を使用) にある場合でも、遅延は約 15 ミリ秒です。これは遅いと思います。
ここに私のコードの一部があります:
server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
server.Bind(new IPEndPoint(IPAddress.Any, port));
server.Listen(1);
// Begin Accept
server.BeginAccept(new AsyncCallback(ClientAccepted), null);
ClientAccepted で、NetworkStream、StreamReader、および StreamWriter をセットアップしました。これは、プレーヤーの場所を更新したいときにメッセージを送信する方法です。
string message = "P" + "\n" + player.Position + "\n";
byte[] data = Encoding.ASCII.GetBytes(message);
ns.BeginWrite(data, 0, data.Length, new AsyncCallback(EndUpdate), null);
EndUpdate が行う唯一のことは、EndWrite を呼び出すことです。これは私がデータを受け取る方法です:
message = sr.ReadLine();
2 番目のスレッドにあるため、ゲームをブロックしません。
これらは私が試したものです: - TCPの代わりにIPを使用してください - テキストの代わりにバイナリメッセージを使用してください - IPv4の代わりにIPv6を使用してください 本当に何も役に立ちませんでした.
レイテンシーを改善する方法について何か考えはありますか?
ありがとうございました