Вниз
Скачать: CL | DM;

Сценарий взаимодействия клиента и сервера   Найти похожие ветки 

← →
Shadow__ ©   (2007-05-24 08:29) [0]

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

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

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

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

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

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


← →
Johnmen ©   (2007-05-24 09:38) [1]

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

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


← →
Сергей М. ©   (2007-05-24 10:10) [2]


> Shadow__ ©   (24.05.07 08:29)


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

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

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


← →
Johnmen ©   (2007-05-24 10:33) [3]


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

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


← →
Anatoly Podgoretsky ©   (2007-05-24 13:53) [4]


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

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


← →
Сергей М. ©   (2007-05-24 13:57) [5]


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


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


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


← →
Сергей М. ©   (2007-05-24 13:59) [6]

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


← →
Shadow__ ©   (2007-05-25 04:25) [7]

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

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

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


← →
DiamondShark ©   (2007-05-25 13:18) [8]


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

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

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



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.014 c
15-1183728592
dima123
2007-07-06 17:29
2007.08.05
иконки...


2-1183965289
Pohil
2007-07-09 11:14
2007.08.05
Перекомпиляция модулей


15-1183465867
Dust
2007-07-03 16:31
2007.08.05
Будут ли когданибудь шаблоны в делфях? может они уже есть?


15-1184140812
db2admin
2007-07-11 12:00
2007.08.05
Опять судят за использование не лицензионного ПО в школе. Rjve


15-1184171968
NiGGa
2007-07-11 20:39
2007.08.05
Delphi + Castalia




   Наверх