Я работаю над небольшой многопользовательской онлайн-игрой в понг с C # и XNA.
Я использую сокеты для передачи данных между двумя компьютерами в моей локальной сети. Работает нормально.
Проблема со скоростью: передача медленная.
Когда я проверяю второй компьютер, он показывает задержку 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();
Это не блокирует мою игру, поскольку она находится во втором потоке.
Это то, что я пробовал:
- Используйте IP вместо TCP
- Используйте двоичное сообщение вместо текста
- Используйте IPv6 вместо IPv4
Ничто не помогло.
Есть мысли о том, как я могу улучшить время ожидания?
Спасибо