Главная страница
    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.47 MB
Время: 0.044 c
2-1183965289
Pohil
2007-07-09 11:14
2007.08.05
Перекомпиляция модулей


15-1184183548
Иксик
2007-07-11 23:52
2007.08.05
Посоветуйте minidv видеокамеру в пределах 300 евро.


2-1183789996
Riply
2007-07-07 10:33
2007.08.05
Длинное и короткое имя файла в одном флаконе. :)


3-1177429478
Juice
2007-04-24 19:44
2007.08.05
Засание при выполнении запроса в Oracle


1-1180095491
Dmitry_177
2007-05-25 16:18
2007.08.05
Цикл в отдельном потоке





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский