Здравствуйте, добрые люди из Stack Overflow,
У меня есть клиент-серверное приложение .NET, работающее с несколькими сотнями клиентов. Проект был переведен с VB6 на .NET около года назад, и это платформа для карточных / настольных игр.
Хотя я попытаюсь дать как можно больше подробностей ниже, проблема заключается в том, что канал замораживается, когда внутри находится 40-70 игроков.
Архитектура
1. Сервер (.NET 4.0)
2. Клиент (.NET 2.0)
Когда к одному каналу подключено более 40 клиентов, он начинает зависать совершенно случайным образом (или это то, что у нас есть прямо сейчас, у нас нет доказательств или достаточно данных, чтобы указать, что совершенно не так). Мы действительно не Я не думаю, что сетевой трафик является проблемой (пока не совсем уверен), так как мы пробовали это на разных серверных машинах с различными настройками. Все серверные машины, которые мы использовали, способны обрабатывать такую большую часть процессов аппаратно. Итак, речь идет о подходе и том, что происходит на стороне кода.
Причина, по которой мы изо всех сил пытаемся решить эту проблему, заключается в том, что мы не совсем уверены, что могло ее вызвать. Посмотрите следующий пример:
Система A имеет 55 человек онлайн на своем канале №1, и он все равно не замораживается. Система A использует IP A1, а канал находится на порту 16xxx.
Система B имеет 25 человек онлайн в своем канале №4, и он случайным образом замораживается на одну или две минуты. Система B использует B1 IP и 18xxx для порта канала. Он находится на одной машине с Системой A, которая не замораживается.
В заключение, это выглядит несущественным для количества людей в сети, но это происходит чаще, когда их число растет.
Мы пробовали запускать Application.DoEvents () в бесконечном цикле выполнения в проекте Channel, думая, что какой-то процесс X заставляет канал переходить в замороженное состояние на несколько минут, что приводит к паузе в канале. Затем он выполняет каждое действие, которое было поставлено в очередь, пока оно было заморожено, за несколько секунд. Использование ЦП в среднем составляет от 7% до 20% на канал, похоже, оно улучшается. Однако это не было постоянным и эффективным решением.
Мы подозреваем:
Информация о сервере
Intel Xeon X3460 2,80 ГГц
16 ГБ ОЗУ
64-битная Windows Server 2008 Enterprise
Я знаю, что невозможно решить проблему, не видя всего кода, но я сожалею, что не могу опубликовать коды. Вместо этого я ищу идею, которая могла бы направить меня в каком-то направлении. Однако мы рады поделиться любой другой информацией для решения этой проблемы.
Спасибо всем, кто помог!