Кто-либо может сказать мне, который более стабилен? Я знаю, что у каждого есть их собственные преимущества и недостатки. Но какой лучше для http и т.д.?
В моем предыдущем приложении я использовал indy9, но я не был удовлетворен им, поскольку я буду иногда получать странные ошибки.
Кто-либо может рекомендовать тот?
Я использую Indy во многих проектах. Я использовал и 9, и 10 в основном как HTTP-сервер и прокси. Проекты порой получают очень интенсивный трафик (HTTP). Инди никогда меня не подводил. Работает очень стабильно.
Но у меня также были некоторые «странные» ситуации, когда мне приходилось копать глубоко, чтобы найти основную проблему. Мне также не нравится, как Indy решает многие задачи с помощью исключений. Вообще мне больше нравится стиль кодирования ICS. Но позвольте мне перейти к ICS.
ICS использует неблокирующие сокеты, в то время как indy использует блокировку. Хотя неблокирование - это нормально и на первый взгляд кажется лучше, во многих ситуациях это меня раздражало. Проблема в том, что естественный поток кода теряется из-за функций обратного вызова. Это затрудняет написание библиотек процедурного типа. Кроме того, мне не нравится, как все обрабатывается через сообщения. Для меня это очень быстро становится беспорядочным при смешивании с многопоточностью. А в наши дни многопоточность стала мейнстримом.
Поэтому, хотя мне нравится стиль кодирования и качество кода в ICS, я предпочитаю простоту использования и режим блокировки Indy. Что вам больше нравится, зависит от вас, но обе библиотеки зрелые и стабильные.
Это мои два цента.
Какой из них лучше, действительно зависит от конкретного варианта использования, но я был недоволен indy как http-клиентом, и ICS оказался именно тем, что мне было нужно, с гораздо меньшим количеством случайных причуд.
Обратите внимание, что это не блокировка, так что это не просто капля замены.
Я использую Indy 9 для стабильного, выпущенного производственного кода для более чем 1 миллиона пользователей и никогда не получал никаких странных ошибок.
Я использовал Indy 9 и 10 для TCP, HTTP и FTP с очень небольшими проблемами. ICS - тоже хороший выбор. Это не блокирует, что изменит то, как вы его используете.
Я не использовал его, но слышал хорошие отзывы о Synapse , который также блокирует.
Я также использую Indy и ICS.
В большинстве случаев я предпочитаю Indy, потому что реализовать последовательный тип протоколов с его помощью очень просто (запрос выполняется в собственном потоке, поэтому вы просто читаете / записываете в соединение, что очень просто). Использование Indy требует глубоких знаний в области многопоточности и синхронизации. В отличие от Runner мне нравится, как Indy использует исключения для обработки «исключительных» вещей, потому что это позволяет мне сосредоточиться на нормальном потоке протокола (я использую блоки try-finally, чтобы убедиться, что я освобождаю ресурсы).
Я также использовал ICS в приложении, где Indy просто потерпел неудачу: я использовал его для приложения, реализующего прокси TCP / IP. Использование ICS было проще из-за его неблокирующего характера. Мне удалось «проксировать» протоколы TCP / IP, о которых я ничего не знаю, поэтому я понятия не имею, как байты будут передаваться от одного конца к другому. Indy потерпел неудачу в этом сценарии, потому что в Indy вы читаете эфир или пишете, вы не можете делать и то, и другое одновременно. Использование ICS для реализации протокола последовательного типа - это немного неудобно: вам, по сути, нужно использовать логику конечного автомата, разбивать протокол на мелкие биты, держать флаги, чтобы вы знали, где вы находитесь в протоколе. Большой плюс: Франсуа Пьетт, автор ICS, активен и очень полезен на ряде форумов и в списках рассылки, а также всегда готов помочь во всем, что связано с ICS.
Для меня, если мне нужно что-то сделать с TCP / IP, путь принятия решения очень прост: можно ли это сделать с помощью Indy? Тогда это Инди.Если это невозможно сделать с помощью Indy, то это будет сделано с помощью ICS!