Высокопроизводительная библиотека сокетов для windows
Я видел очень хорошую библиотеку для сокетов в библиотеке POCO. При этом используется "классический" подход, который работает как на Linux, так и на Windows-системах, в основном на основе SELECT.
Я хотел бы знать, есть ли что-то конкретное для окон, которые используют асинхронный ввод-вывод (порты завершения?), Так как я хочу использовать это на высокопроизводительном прокси /socks-сервере.
3 ответа
В рамках моего проекта программного обеспечения BadVPN с открытым исходным кодом я разработал управляемую событиями (однопоточную) платформу кроссплатформенного сетевого программирования для языка Си. Он использует epoll в Linux и IOCP в Windows.
Некоторые важные части:
- BReactor (цикл обработки событий)
- BConnection (абстракция TCP)
- BDatagram (абстракция UDP)
Он интенсивно использует потоковое программирование. Например, BConnection, абстракция TCP, использует универсальные интерфейсы потокового ввода-вывода StreamPassInterface и StreamRecvInterface. Это очень полезно; например, если вам нужно добавить поддержку SSL в ваше приложение, нужно немного больше, чем бросить объект BSSLConnection поверх BConnection.
Хотя большая часть фреймворка хорошо документирована, я пока не даю никаких руководств по его использованию. Вы можете использовать эту базовую программу в качестве отправной точки. Хотя программа tun2socks не предназначена для обучения и, в особенности, сопровождающая ее небольшая программа udpgw, может оказаться полезной.
Так как вы упомянули SOCKS, в моей структуре я также реализовал очень простой клиент SOCKS5 (без аутентификации и т. Д.), Который используется tun2socks.
Я могу предложить библиотеку C, которую я написал для сетевой игры. Эта библиотека была предназначена для одновременных коротких TCP-соединений большого объема. Он использует асинхронный epoll, kqueues, IOCP или синхронные потоки. Интерфейс очень прост и абстрагируется от функции обратного вызова, как работает node.js. Как эхо-сервер, он может обрабатывать 60 000 запросов в секунду. Смотрите https://github.com/freedib/gasio