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

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

Winsock2 [D6, Win2k]


Страницы:   1 2

Тимохов ©   (2004-04-23 11:02:00) 

Добрый день, уважаемые мастера.

Если позволите хотел бы получить оценку следующей реализации сетевого взаимодействия.

Есть связка - клиент+сервер. Оба мои и на дельфи.
Интерфейс взаимодейтствия в упрощенном виде выглидит так:
Id := Login()

Blob := Get(Id)
Set(Id, Blob)
{Команды get и set могут вызываться в любом порядке и в любом количестве.}

Logout(Id)

Взаимодействие между клиентом и сервером осуществлятся через непосредственные вызовы функций из winsock2 (т.е. компонетами дельфи пока не пользуемся, почему - отдельных разговор).
Сервер в доп. потоке (назовем его П1) пытается через accept получить соединение. Как только accept возвращает ид. сокета для обмена данными запускается новый поток (назовем его П2), который сначала получает вопрос от клиента, затем отправляет ответ. После чего сокет для обмена данными закрывается и поток П2 останавливается. Поток П1 продолжает получать запросы от клиентов. Следующий вопрос+ответ с тем же клиентом будет обработан в новом потоке и новом сокете, после чего и поток и сокет удаляться и т.д.

Сокеты используются синхронные и вроде как блокирующие (не совсем пока понял чем это отличается).

Хотелось бы услышать ответ на вопрос: делает ли так вообще кто-то или нужно держать соединене для каждого клиента начиная с Login и заканчивая Logout?

Заранее спасибо.


Digitman   (2004-04-23 11:25:00) [21]


> ничего ужасного  нет ..?


нет , конечно

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


> Григорьев Антон   (23.04.04 11:10) [4]
> Это что, получается, что клиент для каждого запроса должен
> делать новый connect?


в принципе-то ничего страшного .. ну а как тот же IE работает при клике на гипертекстовую ссылку ? те же "коннект" + Post/Get + "дисконнект" .. в случае с http это вполне обоснованная логика


Тимохов   (2004-04-23 11:21:00) [22]


> Rouse_ ©   (23.04.04 11:18) [7]

Говорил мне кто-то про них.
Видел уже в MSDN, но пока не дошел.
Спасибо, почитаю.


Rouse_   (2004-04-23 11:18:00) [23]

> У меня задача маленькая - убрать старую версию сетевого
> взаимодействия - через файлы на общем дисковом ресурсе

Кстати - еще проще: чтобы не влазить в глубину WinSock API как вариант можно использовать Mailslots. Это наименее трудоемкая задача по реализации, а эффект будет аналогичный...


Rouse_   (2004-04-23 11:16:00) [24]

В принципе нормальный алгоритм работы, но при такой постановке задачи, согласен с Антоном - лучше использовать UDP.


Тимохов   (2004-04-23 11:15:00) [25]


> Григорьев Антон   (23.04.04 11:10) [4]

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

Поэтому если работать будет, пусть и непроизовдительно, то и это хорошо.


> WinSock начинается как раз там, где используются асинхронные
> сокеты, которых у вас нет.

Согласен - вчера ночью читал.
Да надо же както было тему называть :)))


Григорьев Антон   (2004-04-23 11:10:00) [26]

Это что, получается, что клиент для каждого запроса должен делать новый connect? ИМХО, непроизводительно, хотя работать будет. Ведь протокол TCP для того и предназначен, чтобы один раз установить соединение и держать его до конца. Если вам по каким-то причинам постоянное соединение не нужно, лучше присмотритесь к протоколу UDP.

P.S. Кстати, при чём тут WinSock 2? То, что вы описали, укладывается не только в WinSock 1, но и даже в Berkley Sockets. WinSock начинается как раз там, где используются асинхронные сокеты, которых у вас нет.


Тимохов   (2004-04-23 11:07:00) [27]


> Digitman ©   (23.04.04 11:06) [1]

Согласен - разные.
Я имел в виду, что заканчивается execute, т.е. управление доходит до конца.


Тимохов   (2004-04-23 11:07:00) [28]

Так получилось, что этот же вопрос я задавл тут
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1082641309&n=3.

В продолжение ответа, который дал Digitman по указанной ссылке хотелось бы задать уточняющий вопрос.

Насколько я понял ничего ужасного в открытии на каждый вопрос+ответ нового сокета и созадние потока ничего ужасного нет, кроме того, что это трата ресурсов?
В моем случае нагрузка будет очень низкая - порядка 50 кб раз в 5 мин. Думаю что ресурсы можно не экономить?


Digitman   (2004-04-23 11:06:00) [29]


> поток П2 останавливается


останавливается или терминируется ? разные же вещи ..

вообще-то в "Потрепаться" я тебе уже ответил на этот вопрос


Страницы:   1 2

Наверх

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