Серверный сокет Delphi - PullRequest
       2

Серверный сокет Delphi

4 голосов
/ 16 декабря 2010

У нас есть приложение C / S, написанное на Delphi (клиентское и серверное или промежуточное ПО, если хотите) Для клиентской части мы используем Indy. Для сервера мы используем DXSock.

Поскольку DXSock некоторое время не работает, мы исследуем альтернативы для северной части.

Я хочу услышать некоторые комментарии о лучшем альтернативном компоненте Server Socket для Delphi. В существующей системе обычно есть десятки постоянных соединений, каждое из которых работает на своем собственном потоке, но в будущем это может привести к сотням потоков (это должно быть улучшено до пула потоков, если это возможно)

Ответы [ 2 ]

3 голосов
/ 16 декабря 2010

Если вы хотите добиться максимальной производительности, вам придется использовать сокеты в неблокирующем режиме или использовать порты завершения .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.Я думаю, это будет лучшее из возможных представлений.

2 голосов
/ 16 декабря 2010

Я использую компоненты Indy для коммерческой работы на стороне сервера, и набор компонентов довольно солидный (9 или 10).Мои серверы имеют миллионы соединений в день без проблем.

Я использовал DXSock много месяцев назад.Он всегда оптимизировал, но, казалось, никогда не заканчивал это.У него, похоже, есть другая версия.

Если вам нужна коммерческая поддержка, то я бы порекомендовал IPWorks от nSoftware.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...