Как реализовать асинхронный сервер TCP C#?

Начал писать игровой сервер, все бы хорошо но возникла проблема, из-за того что нагрузка планируется более 10к человек а некоторые данные не успевают обрабатываться на стороне клиента то возникают рывки либо вообще отказ обновлять данные на клиентах, логика моего сервера:
1. Подключение к серверу и рассылка всем клиентам о подключении.
2. Синхронизация позиций (отправляется каждый раз, когда игрок двигается)
3. Прием сообщений на стороне клиента и интерполяция старой позиции до новой.

Использую для отправки и приема BinaryWriter и BinaryReader.
Ссылка на сервер: https://yadi.sk/d/ta5pmIFWe_nbwg
Прошу вас помочь решить данную проблему либо подсказать в какую сторону копать.
  • Вопрос задан
  • 1057 просмотров
Решения вопроса 1
@Kosyachoka
Новое поколение создателей "своих 10к ммо серверов" подросло? :) ну ок

Тср или удп выбирается в основном по критерию насколько динамичная будет эта "новая эпичная сага". Если стрелялка, то удп скорость компенсирует качество. Если это "убийца вов, л2" то тср, там важно чтобы действия клиента были доставлены от и к серверу. А затем конечно самое сложное - не бросить это дело через месяц оставаясь без прогресса и наблюдая лаги и глюки. Чтобы сделать игру плавной придется делать адаптивную логику которая будет учитывать задержки сети как на клиенте так и на сервере. Легче всего сделать сначала клиент который будет бегать независимо от сервера, а затем постепенно добавлять туда шаг за шагом контроль со стороны сервера, отточить движение, затем взаимоотношение с миром (удачи с синхронизациец физики), бой итд.
Вобшем не ты первый, не ты последний. Ждем шедевр. Я если че буду десять тысяч первый игрок ;)

P.S. по теме :) . смотри в сторону архитектуры на основе пакетов и очередей. Только так ты выстроишь масштабируемое взаимоотношение клиент-сервера которое не будет загинаться от 20 одновременных подключений
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
mindtester
@mindtester Куратор тега C#
http://iczin.su/hexagram_48
dotnet core rsignal смотрели? если нет, рекомендую
Ответ написан
@asdz
Наверное вам нужно реализовать сервер на основе UdpClient
Ответ написан
dabrahabra
@dabrahabra
.NET Developer
Уоу, для начала надо разобраться с потоками )
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы