У нас есть приложение, которое передает данные по протоколу UDP с серверной системы на клиентские приложения, работающие на нескольких компьютерах с Windows XP.Это в локальной сети, обычно Gigabit.Это работало нормально в течение нескольких лет.
Теперь у нас есть требование, чтобы на каждом четырехъядерном ПК было запущено два (или более) клиентских приложения, причем каждый экземпляр приложения получал широковещательные данные.Метод, который я использовал для реализации этого, состоит в том, чтобы назначить каждому клиентскому ПК несколько IP-адресов.Затем каждое клиентское приложение подключается к серверу, используя тот же номер порта, но с другим IP-адресом.Это работает функционально, но производительность по какой-то причине очень низкая.Моя скорость передачи данных снижается примерно в 10 раз!
. Чтобы получить несколько IP-адресов, я попытался использовать оба адаптера NIC и назначить несколько IP-адресов одному NIC в расширенных сетевых свойствах TCP / IP.Оба метода, похоже, дают одинаково низкую производительность.Я также попытался использовать сетевые карты нескольких разных производителей, но это тоже не помогло.
Одна вещь, которую я заметил, это то, что данные кажутся более фрагментированными.Если на компьютере только один клиент, то если я отправляю клиенту 20 КБ данных, он почти всегда получает все это одним куском.Но при работе двух клиентов данные, как правило, поступают в блоках размером в кадр (1500 байт), поэтому мой код должен повторяться больше раз.Но я бы не ожидал, что это само по себе вызовет столь драматический удар по производительности.
Так что я думаю, что мой вопрос: кто-нибудь знает, почему производительность намного медленнее и можно ли что-нибудь сделать, чтобы ускорить ее?up?
Я знаю, что мог бы изменить дизайн так, чтобы сервер отправлял данные только одному клиенту на ПК, и этот клиент мог затем зеркально отразить данные другим клиентам на том же ПК.Но это серьезная работа по редизайну и перекодированию, поэтому я хотел бы сохранить это в качестве крайней меры.