Вы хотите использовать асинхронный ввод / вывод с портом завершения ввода / вывода (IOCP).
Это слишком много, чтобы объяснить в ближайшее время, но любое приложение Windows, которое должно поддерживатьбольшое количество одновременных сокетов должно использовать IOCP.
IOCP - это, по сути, Windows-потокобезопасная рабочая очередь.Вы помещаете «пакет завершения» в IOCP, а затем другой поток удаляет его из очереди и работает с ним.
Вы также можете связать многие типы дескрипторов, которые поддерживают перекрывающиеся операции, такие как сокеты, с IOCP.Когда вы связываете дескриптор с IOCP, перекрывающиеся операции, такие как WSARecv
, автоматически отправляют пакет завершения на связанный IOCP.
Таким образом, по сути, вы можете иметь один поток, обрабатывающий все 1000 соединений.Каждый сокет будет создан как перекрывающийся сокет, а затем будет связан с вашим IOCP.Затем вы можете позвонить WSARecv
на все 1000 сокетов и подождать, пока завершающий пакет станет доступным.Когда данные получены, операционная система отправит пакет завершения на соответствующий IOCP.Он будет содержать соответствующую информацию, например, сколько данных было прочитано и буфер, содержащий данные.