Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2007.08.05;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "Основная";
Текущий архив: 2007.08.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.042 c
15-1183734236
oldman
2007-07-06 19:03
2007.08.05
Грубые вы, уйду я от Вас...


15-1183831959
MsGuns
2007-07-07 22:12
2007.08.05
Почему в рекламных роликах такие противные голоса ?


15-1183887525
ArtemESC
2007-07-08 13:38
2007.08.05
Есть ли какие-нибудь форумы где можно задавать ...


11-1166730914
MTsv DN
2006-12-21 22:55
2007.08.05
Ошибка в FileSize


3-1177424576
alpha5
2007-04-24 18:22
2007.08.05
Как узнать позицию маркера (индикатора) в dxDBGrid ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский