Инди или ICS или?

Кто-либо может сказать мне, который более стабилен? Я знаю, что у каждого есть их собственные преимущества и недостатки. Но какой лучше для http и т.д.?

В моем предыдущем приложении я использовал indy9, но я не был удовлетворен им, поскольку я буду иногда получать странные ошибки.

Кто-либо может рекомендовать тот?

17
задан TZHX 25 September 2012 в 11:58
поделиться

5 ответов

Я использую Indy во многих проектах. Я использовал и 9, и 10 в основном как HTTP-сервер и прокси. Проекты порой получают очень интенсивный трафик (HTTP). Инди никогда меня не подводил. Работает очень стабильно.

Но у меня также были некоторые «странные» ситуации, когда мне приходилось копать глубоко, чтобы найти основную проблему. Мне также не нравится, как Indy решает многие задачи с помощью исключений. Вообще мне больше нравится стиль кодирования ICS. Но позвольте мне перейти к ICS.

ICS использует неблокирующие сокеты, в то время как indy использует блокировку. Хотя неблокирование - это нормально и на первый взгляд кажется лучше, во многих ситуациях это меня раздражало. Проблема в том, что естественный поток кода теряется из-за функций обратного вызова. Это затрудняет написание библиотек процедурного типа. Кроме того, мне не нравится, как все обрабатывается через сообщения. Для меня это очень быстро становится беспорядочным при смешивании с многопоточностью. А в наши дни многопоточность стала мейнстримом.

Поэтому, хотя мне нравится стиль кодирования и качество кода в ICS, я предпочитаю простоту использования и режим блокировки Indy. Что вам больше нравится, зависит от вас, но обе библиотеки зрелые и стабильные.

Это мои два цента.

16
ответ дан 30 November 2019 в 11:08
поделиться

Какой из них лучше, действительно зависит от конкретного варианта использования, но я был недоволен indy как http-клиентом, и ICS оказался именно тем, что мне было нужно, с гораздо меньшим количеством случайных причуд.

Обратите внимание, что это не блокировка, так что это не просто капля замены.

2
ответ дан 30 November 2019 в 11:08
поделиться

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

2
ответ дан 30 November 2019 в 11:08
поделиться

Я использовал Indy 9 и 10 для TCP, HTTP и FTP с очень небольшими проблемами. ICS - тоже хороший выбор. Это не блокирует, что изменит то, как вы его используете.

Я не использовал его, но слышал хорошие отзывы о Synapse , который также блокирует.

6
ответ дан 30 November 2019 в 11:08
поделиться

Я также использую 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!

7
ответ дан 30 November 2019 в 11:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: