Если вы хотите добиться максимальной производительности, вам придется использовать сокеты в неблокирующем режиме или использовать порты завершения .IPWorks реализован так же, как и iocp .Насколько я могу судить, Indy или Synapse не реализуют их (по крайней мере, официально).
Мы использовали порты завершения и пул потоков в нашем open source SynCrtSock *Модуль 1010 *, используемый в нашей Synopse SQLite3 framework .
Вот некоторые тесты этого решения, работающие от Delphi 6 до Delphi XE.Я не говорю, что это «лучший компонент», но он работает и быстро (каждый запрос составляет около 4 КБ данных JSON):
- Http-клиент продолжает работать (т. Е. Один HTTP /1.1 клиентское соединение сохраняется во время запросов): сначала за 7,87 мс, выполнено за 153,37 мс, т.е. 6520 / с, в среднем 153 мкс
- многопользовательское соединение Http-клиента (т. Е. Одно новое клиентское соединение HTTP / 1.0, созданное для каждого запроса - этоодин использует порты завершения и пул потоков): сначала за 151us, выполнено за 305,98 мс, т.е. 3268 / с, в среднем 305us
Для сравнения скорости, есть другие протоколы связи, доступные в нашей структуре:
- Доступ к именованному каналу: сначала за 78,67 мс, выполнено за 187,15 мс, т.е. 5343 / с, в среднем 187 мкс
- Сообщения локального окна: сначала за 148 мс, выполнено за 112,90 мс, т.е. 8857 / с,в среднем 112us
- Прямой доступ в процессе: сначала через 44us, за 41,69 мс, т.е. 23981 / с, в среднем 41us
Мы используем протокол HTTP / 1.1 через TCP / IP, потому чтоочень мало накладных расходов над простым TCP / IP, и это хорошо управляемый протокол для брандмауэров и тому подобного, который позволяет использовать нашу инфраструктуру в приложении AJAX, тогда как его основная цель - обслуживать клиентов Delphi.
ИМХО нет "лучшего"Серверный сокет "Альтернативный компонент для Delphi", это зависит от того, какова цель вашего серверного приложения.Основным узким местом будет само ядро Windows.Возможно, прямой доступ к HTTP-драйверу ядра (Http.sys) Windows может помочь.
Рассмотрите возможность использования выделенного оптимизированного сервера вместо сервера Delphi, например lighttpd или Cherokee с использованием FastCGI для обработки запросов через приложение Free Pascal (или CrossKylix) в Linux.Я думаю, это будет лучшее из возможных представлений.