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

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

Сценарий взаимодействия клиента и сервера [D7, WinXP]


Shadow__ ©   (2007-05-24 08:29:00) 

Доброго времени суток всем  

Возникла проблема при реализации следующей модели:
1. Есть программа-сервер, каждые 3 секунды она вырабатывает новые данные определенного фиксированного размера.
2. Есть программа-клиент, которая каждые 3 секунды должна эти данные считывать.
3. Пока сервер не запшет, клиент не имеет права что-либо читать и наоборот. Пока клиент все не считает, сервер не должен записывать новую порцию данных.
4. Все это выполняется в цикле, определенное число итераций.
5. Если кто-то не успевает уложиться в 3 секунды, следующая итерация начинается только по окончании всех операций.

У сервера есть одна кнопка "Начать процесс", у клиента кнопок нет и по возможности, быть не должно.

Проблемма:
Как организовать взаимодейсвие программ?
Для наглядности прилагаю схему работы:

Сервер                                      Клиент
.|.........................................ожидание сообщ "начать работу"
сообщение "начать работу" ------------->>...|
.|.........................................ожидание сообщ "можно читать"
шарит в памяти данные.......................|
.|..........................................|
сообщ "можно читать" ------------------>>...|
.|..........................................|
ожидание сообщ "прочитал"..................Читает данные из шары
.|..........................................|
.|.<<-----------------------------------.."прочитал""
.|..........................................|
.|.........................................ожидание сообщ "можно читать"
Обновим зашаренные данные...................|
.|..........................................|
сообщ "можно читать" ------------------>>...|
.|..........................................|
ожидание сообщ "прочитал"..................Читает данные из шары
.|..........................................|
.|.<<-----------------------------------.."прочитал""
.|..........................................|
сообщ "закончить работу" -------------->>...|
.|.........................................ожидание сообщ "начать работу"

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


DiamondShark   (2007-05-25 13:18:00) [1]


> Как дать клиенту понять, что данных больше не предвилится
> в текушей сессии.

1. сопроводить данные специальным флагом "пива нет и сегодня не будет".
2. разорвать соединение.

одно из двух или и то и другое, что больше нравится


Shadow__   (2007-05-25 04:25:00) [2]

Спасибо за комменты, у меня пока неразбериха по поводу взаимодействия. так что прошу сильно не пинать :)

""1. Клиент делает запрос "дай такие-то данные".
2. Сервер, в зависимости от готовности данных, либо тут же передает эти данные либо молчит до момента готовности. Передав данные, сервер разрывает соединение, если данных более нет и не предвидится в тек.сессии.
3. Клиент принимает данные, обрабатывает их и переходит к п.1""

Сессия одна, но порций данных несколько.
Как дать клиенту понять, что данных больше не предвилится в текушей сессии.


Сергей М.   (2007-05-24 13:59:00) [3]

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


Сергей М.   (2007-05-24 13:57:00) [4]


> Johnmen ©   (24.05.07 10:33) [3]


> В данной ситуации


В данной ситуации мне более всего непонятно, чем провинится клиент, если будет опрашивать сервер чаще чем раз в 3 сек)


Anatoly Podgoretsky   (2007-05-24 13:53:00) [5]


> Сервер, "командующий" клиентом - мягко говоря, "неправильный"
> сервер.

Слишком мягко говоришь - это клиент грубо говоря


Johnmen   (2007-05-24 10:33:00) [6]


> Сергей М. ©   (24.05.07 10:10) [2]
> Передав данные, сервер разрывает соединение, если данных более нет и не предвидится в тек.сессии.

В данной ситуации это лыжи по асфальту :)


Сергей М.   (2007-05-24 10:10:00) [7]


> Shadow__ ©   (24.05.07 08:29)


Сервер, "командующий" клиентом - мягко говоря, "неправильный" сервер.

Классическая схема :

1. Клиент делает запрос "дай такие-то данные".
2. Сервер, в зависимости от готовности данных, либо тут же передает эти данные либо молчит до момента готовности. Передав данные, сервер разрывает соединение, если данных более нет и не предвидится в тек.сессии.
3. Клиент принимает данные, обрабатывает их и переходит к п.1


Johnmen   (2007-05-24 09:38:00) [8]

Программа-клиент каждые 3 секунды спрашивает у сервера: Есть для меня данные?
Сервер отвечает:
- нет: т.е. сервер занят, он вырабатывает; клиент спросит ещё раз через 3 сек.
- да: клиент читает, сервер не вырабатывает; закончил читать - начался отсчет 3 сек. на клиенте, и вырабатывания на сервере.

Всё. Никаких ненужных сообщений.


Наверх

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