Wiki: Современное состояние сторонних библиотек компонентов TCP / IP Delphi - PullRequest
21 голосов
/ 19 апреля 2011

Я уже 18 месяцев не использую голый метал TCP / IP, поэтому мне интересно, каково текущее состояние дел.

Я ищу как положительные, так и отрицательные стороны при разработке как серверного, так и клиентского программного обеспечения.
Я буду делать проект, который нуждается в надежном уровне TCP / IP, поэтому для меня это важный аспект:)

Для того, чтобы это стало вики-сообществом, я ищу более широкие ответы, чем просто «твердое тело». Так, например, информация о ширине признака также приветствуется.

Я буду обновлять вопрос с соответствующими аспектами, найденными в ответах, чтобы получить вики-статью, которая имеет сбалансированный обзор этих библиотек.

Например, см. Мой ответ ниже с моим прошлым опытом работы с Инди У меня двойственное отношение к обработке исключений и антифризу в Indy, хотя я привык к этому, он все еще чувствовал себя неестественно.

Сейчас я разрабатываю как для Delphi 2007 (не Unicode), так и для XE (Unicode), поэтому рассматриваемые мной библиотеки должны поддерживать как минимум эти две версии Delphi.

Ответы [ 7 ]

9 голосов
/ 19 апреля 2011

Редактировать: Резюме моего прошлого опыта работы с Indy и комментарии (спасибо Евгений , Марьян ) (пожалуйста, обновите текущее состояние Indyart):

Pro:

  • поставляется с Delphi
  • зрелым
  • сообществом разработчиков
  • с открытым исходным кодом, поэтому многие глаза внимательно изучают эти источники
  • и множество ценных документов с комментариями в исходном коде
  • Поддержка OpenSSL
  • поддерживает широкий набор версий Delphi (включая 2007 иXE)
  • широкий выбор протоколов

Con:

  • версия с Delphi не всегда была самой стабильной;загрузка из исходников обычно требовалась для получения стабильной сборки
  • (в то же время) большого количества дублирования кода, который сейчас есть в Delphi (но Indy требуется для совместимости со старыми версиями Delphi)
  • не все компоненты TCP / IP были современными (например, тогда компонент клиента POP3 не поддерживал некоторые основные команды POP3)
  • Совместимость версий была проблемой: обновление с одной версии Indy до другойможет занять очень много времени
  • У меня двойственное отношение к обработке исключений и антифризу в Indy, хотя я привык к этому, это все еще чувствовало себя несколько неестественно.
  • Разрывные изменения сделаны междустроить обновления;если для размещения этих
5 голосов
/ 19 апреля 2011

ICS - Internet Component Suite

ICS - см. Www.overbyte.be . Открытый источник Франсуа Пиетт. Для меня это всегда была альтернатива номер 1 для Инди. Это наиболее интересный момент продажи: он облегчает использование асинхронных программ, а асинхронность кажется более близкой к программированию «голых железных» сокетов.

Я использовал его для создания довольно сложного прокси-сервера VNC, в котором сам прокси (сервер) построен с использованием ICS, а клиенты представляют собой смесь Indy и ICS. В периоды высокой нагрузки прокси-сервер обрабатывает около 100 одновременных подключений и около 10 одновременных сеансов экрана VNC. Он потребляет в среднем 5 Мбит / с, обрабатывает соединения через два разных интернет-соединения. Я не думаю, что 100 + 10 - это предел, потому что сервер справляется с этим без каких-либо проблем, а загрузка ЦП слишком мала, чтобы упоминать.

Плюсы:

  • Работает асинхронно
  • Несколько проще для новичков, потому что не нужны темы
  • Поддерживает большое количество протоколов

Минусы:

  • Полагается на сообщения Windows. Мне это просто не нравится.
  • Асинхронное поведение делает реализацию большинства протоколов несколько затруднительной (поскольку большинство протоколов имеют вид команда отправки / получение ответа ). Это не должно иметь значения для большинства людей, поскольку ICS предлагает готовую реализацию для наиболее часто используемых протоколов.

С учетом всего сказанного, я не использовал ICS в течение очень долгого времени, я не в курсе всех наворотов. Это CW, поэтому, пожалуйста, отредактируйте и разверните!

2 голосов
/ 19 апреля 2011

Вы можете рассмотреть возможность использования более высокого уровня протокола, такого как HTTP, потому что:

  • Это более дружественный межсетевой экран и VPN;
  • Это хорошо документировано и известно как хороший протокол;
  • У него уже есть защищенная версия HTTPS;
  • У него очень низкие накладные расходы по строке TCP / IP;
  • Он готов к использованию в среде AJAX (если он вам нужен вбудущее);
  • Microsoft уже выполнила низкоуровневую настройку для вас в современной версии Windows.

В этом случае вы можете взглянуть на два Open Sourceклассы , работающие от Delphi 6 до XE:

THttpApiServer, который реализует HTTP-сервер с использованием быстрого сервера в режиме ядра http.sys:

  • HTTP-сервер API позволяетприложения для связи по HTTP без использования Microsoft Internet Information Server (IIS).Приложения могут регистрироваться для получения запросов HTTP для определенных URL-адресов, получения запросов HTTP и отправки ответов HTTP.HTTP-сервер API включает поддержку SSL, поэтому приложения могут обмениваться данными через безопасные HTTP-соединения без IIS.Он также предназначен для работы с портами завершения ввода / вывода.
  • HTTP-сервер API поддерживается в операционных системах Windows Server 2003 и Windows XP с пакетом обновления 2 (SP2).Помните, что Microsoft IIS 5, работающий в Windows XP с пакетом обновления 2, не может использовать порт 80 совместно с другими приложениями HTTP, работающими одновременно.

TWinHTTP, который обрабатывает запрос HTTP / 1.1 на стороне клиента с помощью WinHTTPAPI:

  • Службы Microsoft Windows HTTP (WinHTTP) предназначены для серверных приложений среднего уровня и серверных приложений, которым требуется доступ к стеку HTTP-клиентов;
  • намного быстрее, чем старыеWinINet API.

Результирующая скорость очень хорошая (особенно сервер), и вы будете полагаться на реализацию Microsoft.Первый является ядром IIS, а второй используется в последних версиях Internet Explorer.

2 голосов
/ 19 апреля 2011

Ответ действительно зависит от многих факторов и ваших требований, таких как

  1. какие уровни необходимы (TCP, SSL / TLS, протоколы уровня приложения)
  2. нужен ли вам клиент или сервер (сервер - гораздо более сложная задача)
  3. Считаете ли вы оплаченные варианты.

В целом, не так много (положительного) произошло за 18 месяцев или даже за 3 года, так как большинство разработчиков рассматривают .NET как основную платформу разработки.

Clever Internet Suite упоминается в другом ответе, а DevArt's SecureBridge получил некоторые новые функциональные возможности.

Наш SecureBlackbox предлагает поддержку самых передовых функций (помимо собственного SSL / TLS): IPv6, HTTPS-прокси с базовой, дайджест-проверкой и аутентификацией NTLM (начиная с SecureBlackbox 9), международные доменные имена (начиная с SecureBlackbox 9), DNSSEC, контроль полосы пропускания и многое другое.

Протоколы прикладного уровня, поддерживаемые SecureBlackbox: HTTP (клиент и сервер), WebDAV (клиент и сервер), FTP (клиент и сервер), SSH и SFTP (клиент и сервер), клиенты SMTP и POP3, клиент DNS, AS2 и AS3. Все протоколы (кроме SSH и SFTP, конечно) имеют полную поддержку SSL / TLS.

Список поддерживаемых протоколов можно найти на странице Packages . Поддерживаемые функции протокола перечислены на странице технической спецификации для каждого пакета.

2 голосов
/ 19 апреля 2011

Я бы настоятельно рекомендовал Clever Internet Suite , это, безусловно, лучший дизайн и письменный набор компонентов связи. Это не бесплатно и поэтому не так хорошо известно, но это хорошо стоит исследовать.

Pro:

  • хорошо спроектировано и написано
  • содержит множество компонентов и реализует различные протоколы.
  • поддерживает широкий набор версий Delphi (включая 2007 и XE)
  • Поддержка SSL
  • зрелый продукт как история выпуска указывает

Con:

  • не с открытым исходным кодом
2 голосов
/ 19 апреля 2011

Я использую Indy с 2003 года для своей собственной среды связи TCP.Это отличная версия, у меня есть версия, используемая в Delphi 2007, а другая - в Delphi 2010, если вы правильно обрабатываете потоки, нет необходимости использовать антифриз, и у меня согласованная обработка исключений на клиенте и сервере.реализовав мою собственную оболочку вокруг этого.

Вы можете загрузить ее здесь (http://www.csinnovations.com/framework_delphi.htm) - ищите Tcp модулей, в основном AppTcpServerUnt и AppTcpClientUnt.

1 голос
/ 19 апреля 2011

Работал с компонентами NetMaster (кстати!) Назад в старых версиях Delphi (2! 3! 4!)

Работал с Инди, но у меня было неестественное чувство (на самом деле я бы назвал его более громоздким)

Наткнулся на Synapse , когда я искал просто легкую оболочку для сетевого интерфейса Windows,

А затем заново открыл старый старый TTcpClient / TTcpServer. Они - собственная обертка Дельфи от Winsock! Я использую их блокировку с выделенным наследником TThread для каждого TTcpClient и позволяю TTcpServer выполнять потоки и выполнять всю работу в DoAccept, см. здесь для примера.

Это, вот теперь, дало мне твердое ощущение, которое мы ищем. Если вы хотите поддерживать большую нагрузку, я бы попытался создать менеджер потоков, который обрабатывает несколько сокетов / соединений на поток, или имеет два набора потоков: несколько, которые прослушивают большее количество «неактивных» подключений, и другие, которые обрабатывают меньшие «активные» соединения, переключение соединений между потоками в зависимости от того, обрабатывается ли запрос или ответ. (например, HTTP Connection: keep-alive)

...