Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Indy vs Client/Server Sockets


Автор: Молоток 17.4.2008, 10:00
Постоянно работаю с ClientSocket, ServerSocket
Отлично всё работает.
Почему все говарят что лучше использовать Indy Однако не говарят почему это лучше..
Хочу услышать мнения специслистов на эту тему.
Спасибо.

Автор: kemiisto 17.4.2008, 10:27
В принципе, отличий много:
  •  в Indy - кросплатформенные компоненты (VCL, CLX, VCL.NET);
  •  в Indy - не только низкоуровневые компоненты, но и высокоуровненвые.
  •  ...

Но главная причина:

Цитата(Borland)

Borland is deprecating the use of the TServerSocket and TClientSocket from the unit ScktComp. It is recommended that you use the Indy components for socket operations. The TServerSocket and TClientSocket will no longer be installed on the component palette by default. If you require the use of these components then you can install the design time package named dclsockets70.bpl, found in your bin directory. For deployment with runtime packages, you will need to deploy rtl70.bpl and any other required
packages.

Автор: Молоток 17.4.2008, 10:30
kemiisto
 в Indy - кросплатформенные компоненты (VCL, CLX, VCL.NET);

Приложения Делфи сами по себе не могут работать в nix Системах, так что не какой не плюс, а минус что есть лишние компоненты.

Автор: Poseidon 17.4.2008, 10:41
Цитата(Молоток @  17.4.2008,  10:30 Найти цитируемый пост)
Приложения Делфи сами по себе не могут работать в nix Системах
А Clicks-приложения (CLX) могут? А Indy в CLX есть! А Socket есть?

Автор: ksili 17.4.2008, 11:01
По-моему Indy на этих самых сокетах и сделана

На Indy нельзя скачать часть HTTP-страницы (напрмер, только первых 10 кБ) - только полностью, а на сокетах это сделать можно. 
В общем по-моему Indy это скорее высокоуровневые компоненты. А сокеты по отношению к ним - более низкоуровневые

Автор: Poseidon 17.4.2008, 11:08
Вообще, смотря для каких целей что надо. Можно на прямую брать функции из winsock.dll и говорить что не Indy, не Sockets не нужны. Но согласись, создать ftp сервер все-же проще на Indy чем на ServerSocket (кода менше, времени менше надо).

Автор: MetalFan 17.4.2008, 13:28
у инди есть TidTCPServer/TidTCPClient... отличается от стандартных(TServerSocket, TClientSocket) более продвинутым функционалом и отсутствием неблокирующего режима работы

Автор: Молоток 17.4.2008, 13:29
Poseidon, Почему ФТП сервер можно и на сокетах написать я писал.
Тойсть для всех задач, я использую сокеты начиная от передачи файлов и крупных проектов по работе
с базами даных через сервер.
Для любых целей!

Автор: MetalFan 17.4.2008, 13:41
Цитата(Молоток @  17.4.2008,  13:29 Найти цитируемый пост)
Почему ФТП сервер можно и на сокетах написать я писал.

а можно и колесо заново изобрести и велосипед самому руками собрать... только вот зачем? будут ли оправданы затраты человеко-часов?

Автор: Молоток 17.4.2008, 15:06
MetalFan, Там что одной функцией 
ftp.create();
И всё у меня полноценный ФТП сервер с всеми примочками ? ))
Один фиг кодить прийдётся даже самую простую докачку файлов при обрыве связи или туже передачи файлов.

Добавлено через 1 минуту и 35 секунд
Я если не знаю к примеру инди вообще то гараздо быстрей напишу сервак на сокетах с которыми постоянно работаю smile
Вопрос идёт изначально идёт  не о том кто что напишет.
а о том почему нельзя использовать сокеты, чем лучше инди, и факты которые это подтверждают! smile

Автор: MetalFan 17.4.2008, 15:13
Цитата(Молоток @  17.4.2008,  15:06 Найти цитируемый пост)
Я если не знаю к примеру инди вообще то гараздо быстрей напишу сервак на сокетах

там знать нечего. кинул компонент, прописал пару событий, вызвал пару методов и все.
5 строк кода.
а вот на сокетах врядли ты "гараздо" быстрее напишешь тоже самое, что на инди за 5 минут можно сделать.
нет, написал, так молодец, что и говорить. но рекомендовать всем писать самим... я бы не стал.

Автор: Poseidon 18.4.2008, 21:59
Цитата(Молоток @  17.4.2008,  13:29 Найти цитируемый пост)
Poseidon, Почему ФТП сервер можно и на сокетах написать я писал.
Молодец! Только я не пойму, зачем ты сокеты вообще трогал? Брал бы сразу winsock.dll и в путь. Окно тоже на WinAPI сразу бы рисовал. Все события сам обрабатывал. И потом писал бы "народ, а чего вы TButton используете? На ВинАПИ кнопку создать - как два пальца..." Никто не писал что на сокетах нельзя фтп-сервер замутить. Только то, что ты будешь на сокетах делать неделю, с помощью Indy сделается за день. Конечно, если делаешь для себя и времени валом, то никто не запрещает. А если заказчик гонит в шею и ему, в готовой программе, глубоко фиолетово на чем у тебя строится работа. Пади ему обьясни, что неделю придется ждать только потому, что тебе не охота работать с Indy.

Цитата(Молоток @  17.4.2008,  15:06 Найти цитируемый пост)
Вопрос идёт изначально идёт  не о том кто что напишет.
а о том почему нельзя использовать сокеты, чем лучше инди, и факты которые это подтверждают
Где ты увидел что нельзя? Если было бы нельзя, то сокеты не оставили бы в семерке (когда Indy появились). Да и в мануалах только рекомендуют не использовать сокеты, но никто не запрещает. Нравится? Действуй. Пиши целую процедуру захода на сервер и получения от него ответа на get-запрос в пару десятков строк кода. А все остальные напишут IdHttp.Get и будут довольны.

Автор: gggl 25.4.2008, 10:21
Цитата(ksili @ 17.4.2008,  11:01)
...
На Indy нельзя скачать часть HTTP-страницы (напрмер, только первых 10 кБ) - только полностью, а на сокетах это сделать можно. 
...

Так это верно?
Если да то это большой минус по indy :(

Автор: MetalFan 25.4.2008, 22:11
Цитата(ksili @  17.4.2008,  11:01 Найти цитируемый пост)
На Indy нельзя скачать часть HTTP-страницы

можно, но нестандартным подходом

Автор: Poseidon 28.4.2008, 08:31
Цитата(ksili @  17.4.2008,  11:01 Найти цитируемый пост)
На Indy нельзя скачать часть HTTP-страницы (напрмер, только первых 10 кБ)
А смысл? Indy правильно все делает, либо качаем все, либо ничего. Смысл качать только часть? Высока вероятность что многие теги не будут закрыты. Зачем нам такая страница?

Автор: ksili 28.4.2008, 08:38
Цитата(Poseidon @  28.4.2008,  12:31 Найти цитируемый пост)
 Зачем нам такая страница?

Можно качать и не для отображения. У меня вот была задача, где программа должна была для выполнения определённых действий делать несколько переходов по страницам. При этом я знал, что  ссылка на следующую страницу для перехода находится вверху текущей страницы. А значит не было смысла качать всё остальное. Если качать столько, сколько нужно, трафик бы снизился в несколько раз. 
Конечно, это была специфическая задача, но тем не менее...

Автор: Poseidon 28.4.2008, 09:44
Цитата(ksili @  28.4.2008,  08:38 Найти цитируемый пост)
Конечно, это была специфическая задача, но тем не менее...
Специфические задачи требуют специфических подходов. На Indy такие подходы тоже есть. Но вот только каково будет удивление пользователей такой программы, если страница изменится и искомая ссылка окажится внизу? Да и экономия трафика спорная. Сколько занимает среднестатистическая страница (только html-код)? 10кб? Не думаю что на много больше.

Да, тут вот подумал. Сколько строк будет занимать код на сокетах, который умеет "бегать" по https ссылкам? Это же SSL подгружать придется, шифровать-расшифровывать. А теперь представим: все у нас прекрасно работало по http, все отлажено и тут бац, нужно сменить http на https. Если мы пишем на сокетах, то придется заново все переписывать, отлаживать, тестировать. А это время (а для кого-то еще и деньги). А если на Indy, то нужно будет "кинуть" один компонент на форму (IdSSLIOHandlerSocket) и связать его с idHttp (idHttp.IOHandler:= IdSSLIOHandlerSocket). Все! Ничего не надо переписывать, ничего отлаживать. Сколько это времени аймет? Ну максимум минуту. Сколько лишних строк кода? Ни одной (с учетом того что все можно в инспекторе сделать). Вот вам и разница.


Точно такое же и с куками и еще куча с чем.

Автор: gggl 30.4.2008, 01:58
Poseidon такое ощющение что инди этото пуп земли а то что в нем нельзя, то впринципе и никаму ненужно, да инди качает всю страницу целиком что не есть гуд, и сколько бы вы текста не написали минус в плюс не привратится...
p.s.: и страници бывают и по 600кб (html).

Автор: Poseidon 30.4.2008, 08:31
VCL тоже не пуп земли, но почему-то некто не пишет серьезные программы на WinAPI. Хотя VCL "тягает" за собой все что возможно, надо это будет или нет. И это минус. Но почему-то никто не обращает внимание на этот минус, а наоборот, то, что в VCL не нужно много лишних движений делать (как в WinAPI или в sockets) - это огромный плюс, который с лихвой перекрывает минус "больших программ" (в случае VCL) и лишнего трафика (в случае Indy). Сейчас, в эпоху безлимитного выделенного интернета и терабайтных винчестеров, мало кто смотрит на размер (программы или трафика). Сейчас смотрят на удобство и скорость (в разработке). Indy, как и VCL, дают такое удобство, чего не скажешь про sockets и WinAPI.

PS. Про SSL возразить нечего?

Цитата(gggl @  30.4.2008,  01:58 Найти цитируемый пост)
p.s.: и страници бывают и по 600кб (html).
Хотелось бы ссылочку на такую страницу, в которой будет 600кб чистого html (т.е. без картинок, флеша и т.п.)

Автор: MetalFan 30.4.2008, 09:27
можно! можно в индях скачать часть страницы. только не совсем стандартным способом, но можно

Автор: gggl 30.4.2008, 23:30
Цитата(Poseidon @ 30.4.2008,  08:31)
...
Хотелось бы ссылочку на такую страницу, в которой будет 600кб чистого html (т.е. без картинок, флеша и т.п.)
...

Даже на этом форуме (Vingrad) если покопатся можно найти достаточно увесистые страници, особенно где вставленно много исходного кода, ещё этим блецут конференции на http://www.ixbt.com/ 

для примера эта страница весит 96кб (на момент написания) хотя эта страница не заполнена полностью и здесь нет ниодной строчки исходников...
Вот и сравните 10кб и 96 есть разница?

P.S.: Уж извените трафик у меня не халявный что бы лазить и искать такую страницу.

Автор: Poseidon 1.5.2008, 00:44
Цитата(gggl @  30.4.2008,  23:30 Найти цитируемый пост)
Уж извените трафик у меня не халявный что бы лазить и искать такую страницу
Но ведь браузером же лазите smile

Я еще раз повторю, никто не запрещает использовать сокеты. Все-лишь рекомендуют переходить на Indy. Рекомендуют потому что Indy более гибки и уневерсальны. То, что на сокетах делается целой процедурой в десятки строк, на Инди делается в инспекторе обьектов вообще без кода. Это значительно упрощает и сам код и его разработку. Хотя для некаторых целей все же целесообразней использовать сокеты. Точно так же как и для некаторых целей целесообразнее написать на WinAPI. Тут все зависит от задачи. Но все же подавляющее большинство задач целесообразнее решать с помощью Индийцев.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)