Я разрабатываю TCP-сервер на Go, который должен принимать до 500 одновременных клиентских подключений.
я использую net.Listen("tcp4", listenerAddress)
для создания моего TCP слушателя.
У меня была проблема в Linux, когда все 500 клиентов подключались одновременно - очередь приема TCP заполнялась. В моей системе Linux это было 128. Я решил это, увеличив размер очереди с помощью параметра ядра: sysctl -w net.core.somaxconn=512
.
Но как этого добиться в Windows? Похоже, что в моей ОС Windows Server размер очереди установлен на 200. Я не вижу никаких параметров, которые я мог бы передать слушателю с помощью функций языка Go, а также я не очень знаком с системами Windows, поэтому также не нашел никаких исправить через ОС. В настоящее время, когда я пробую около 300-400 одновременных клиентов, очередь заполняется, и клиенты отклоняются. Повышение производительности или приоритета потока слушателя (скорости приема клиентов) также не является вариантом, поскольку все клиенты могут подключаться одновременно. Не поймите меня неправильно, сервер может обрабатывать 500 соединений, когда они не прерывистые, открывая их одновременно.