Не похоже, что вы в состоянии легко написать приложение для стресс-теста, чтобы быстрее воспроизвести его вне полосы, что я обычно рекомендую.Прагматичным решением может быть периодическая перезагрузка сервера и клиента в то время, когда вы считаете, что система менее загружена или когда возникают проблемы.Это звучит как обман, но многие производственные системы, с которыми я был связан, используют этот подход для максимизации времени безотказной работы системы.
Мое предпочтительное решение здесь - абстрагирование кода сокета сервера и клиента (надеюсь, ваш дизайн позволяет это сделатьбез лишних усилий) и использовать его для реализации клиентских и серверных тестовых приложений, которые можно использовать для стресс-тестирования только кода сокета путем имитации большого количества обычного трафика сокета за короткий промежуток времени - это помогает идентифицировать временные окна и крайние случаи, которыесо временем может вызвать проблемы и может ускорить процесс получения отлаживаемого репро - вы можете симулировать сетевую ошибку в тестовом коде, периодически сбрасывая сокет на клиенте или сервере.
Еще один шаг, который необходимо предпринятьстратегическим направлением было бы обеспечение хорошей диагностики в обработчиках сокетов на стороне клиента и сервера.Отслеживайте, открывайте и закрывайте сокет, обращая особое внимание на ошибку сокета, и повторно соединяйте пути, если вы знаете, что сеть ненадежна.Убедитесь, что журналы выводятся последовательно с отметкой времени.Что-то простое, как это может быстро показать вам, какие ошибки или условия вызывают ваши проблемы.Вы можете быстро убедиться, что журналы правильные и полные, используя тестовые приложения, о которых я упоминал выше.
Одна вещь, которую вы, возможно, захотите проверить, это то, что вы не поражены отсутствием возможности повторного использования адресов.Иногда, когда сокет закрывается, его нельзя сразу же повторно использовать для попытки повторного подключения, поскольку на одном или другом конце все еще сохраняется остаточная активность.Вы можете обойти это (основываясь на моем опыте работы с Windows / Winsock), экспериментируя с SO_REUSEADDR и SO_LINGER на своих сокетах.тем не менее, мой первый акцент в вашем случае будет заключаться в том, чтобы код сокета на клиенте и сервере правильно обрабатывал все ошибки и основные случаи, прежде чем беспокоиться об этом.