Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Что лучше? [D7, WinXP]


IgneouS ©   (2006-11-20 20:00:00) 

Здравствуйте! Я недавно решил сделать программу клиент\сервер для обмена файлами, голосом и т.д.. До этого я делал такие программы через Client и Server Socket'ы. Прописывал в ручную что происходит при коннекте клиентрского приложения к серверу (создание потока работы с клиентом и т.д.), в клиенте тоже самое - сам писал что при коннекте должен создаться поток и делать ..... А сейчас узнал, что есть компоненты типа TidThreadMgrDefault и TidThreadMgrPool, которые, судя по тому что я о них прочитал делают тоже самое в комплекте с  TCPClient и TCVPServer Socket'ами. Вот и хотелось бы узнать действително ли это так? И если да - то как это лучше использовать?


Сергей М.   (2006-11-21 15:44:00) [1]


> IgneouS ©   (21.11.06 15:28) [8]



> потоки на сервере(TServerClientThread) мне нужны для того,
>  чтобы можно было работать одновремменно со всеми клиентами


И гдеэто условие обозначено в первоначальном вопросе ?
Нигде.
Потому и возникло у меня сомнение.

и при чем здесь TidThreadMgrDefault и TidThreadMgrPool ?
Это Indy, а TServerClientThread имеет отношение к TServerSocket.
TServerSocket и TIdTCPServer - совершенно разные компоненты.


> У клиента так же есть поток(класса TThread - обычный поток),
>  он нужен для того, чтобы можно было управлять клиентом(спящий
> режим например). Вообщем с потоком удобнее. Но возможно
> и без него можно


Вот и я говорю - зачем thread клиенту ?
Ты ведь и сам себе не сможешь ответить вразумительно на сей вопрос)

Thread'ы нужны тогда, когда в них есть реальная обоснованная необходимость. а не для того "щоб було".


> поток класса TServerClientThread, он находится внутри другого


Поток не может быть "внутри другого", это галиматья.


Eraser   (2006-11-21 15:44:00) [2]

> [8] IgneouS ©   (21.11.06 15:28)


> Во-первый: потоки на сервере(TServerClientThread) мне нужны
> для того, чтобы можно было работать одновремменно со всеми
> клиентами,а не так чтобы выполнялось действие с одним, потом
> со вторым... а 100 получит результат только через ...

Indy сервер по-умолчанию многопоточный, так что ничего там городить не надо.

> Вопрос совсем не в этом.

а в чем?


IgneouS   (2006-11-21 15:28:00) [3]

Во-первый: потоки на сервере( TServerClientThread) мне нужны для того, чтобы можно было работать одновремменно со всеми клиентами,а не так чтобы выполнялось действие с одним, потом со вторым... а 100 получит результат только через ...

У клиента так же есть поток(класса TThread - обычный поток), он нужен для того, чтобы можно было управлять клиентом(спящий режим например). Вообщем с потоком удобнее. Но возможно и без него можно))). А уже внутри него читается что пришло сервера или наоборот отправляются серверу данные ( уже Stream). Относитель того что пришло с сервера или было отправлено делаются определенные вещи.

И ещё  на сервере создается поток класса TServerClientThread, он находится внутри другого, стандартного потока создаваемого при коннекте клиента. Это объяснять долго и не зачем. Вопрос совсем не в этом.


Сергей М.   (2006-11-21 15:08:00) [4]


> у меня путаницы нет


Тогда поехали сначала - зачем тебе threads ?

Цитирую тебя:

"..есть компоненты типа Tid ThreadMgrDefault и Tid ThreadMgrPool .."


> черезчто лучше


Лучше все то любое, что не череззадницу.


> А ты мне говоришь что я не понимаю


А ты и вправду не понимаешь)


IgneouS   (2006-11-21 14:54:00) [5]


> Я думаю, что у тебя в голове путаница с пониманием разницы
> между потоками кода (threads) и потоками данных (streams)


Нет, сейчас у меня путаницы нет... да вроде и не было... И вопрос совсем не в этом. Я спрашивал через что лучше делать клиент\серверную прогу. А ты мне говоришь что я не понимаю того, что до этого сам сделал, хотя ты даже не видел того о чем говоришь ...


Сергей М.   (2006-11-21 13:44:00) [6]


> IgneouS ©   (21.11.06 13:32) [4]



> Возможно вы думаете


Я думаю, что у тебя в голове путаница с пониманием разницы между потоками кода (threads) и потоками данных (streams)


IgneouS   (2006-11-21 13:32:00) [7]

Сергей. Так как клиент\сервер обмениваются пакетами определенной структуры(код действия, ...., .......... (данные, соответствующие коду действия. Тут может быть размер и имя посылаемого файла или информация о пользователе (логин, пароль, ФИО, Адрес, телефон и т.д.))), то необходимо и соответствующие принятие\отправка этих данных. Поток существует до того, пока клиент не отключиться или серевер его принудительно не отключит...

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


Сергей М.   (2006-11-21 08:13:00) [8]


> при коннекте должен создаться поток


Зачем ?


IgneouS   (2006-11-20 22:15:00) [9]

Орион - если "очень грубо говоря - да.", то что лучше? Вроде если использовать компоненты, то часть того, что я прописываю в ручную должны будут делать они сами... Так? А не урежут ли они мои возможности?


Орион   (2006-11-20 20:30:00) [10]

c TIdTCPClient и TIdTCPServer.


> А сейчас узнал, что есть компоненты типа TidThreadMgrDefault
> и TidThreadMgrPool, которые, судя по тому что я о них прочитал
> делают тоже самое

очень грубо говоря - да.


> И если да - то как это лучше использовать?

дык, как хочешь - так и используй :)


Наверх

Титульная страница Поиск, карта сайта Написать письмо