Страниц: [1]
  Печать  
Автор Тема: отвалился клиент и сервер блокирован  (Прочитано 7553 раз)
leha
Участник
*
Offline Offline

Сообщений: 3


Просмотр профиля WWW
« : Ноября 19, 2004, 08:20:30 am »

вообщем есть несколько машин которые сливают данные на одно устройство. Устройство может работать одновременно только с одним. Ну написал я сервер пытающийся разрулить запросы к устройству. Стартует ждет запроса от клиента, получив запрос даю клиенту команду работай увеличиваю счетчик на единицу и всем остальным клиентам отлуп, клиент закончив передачу посылает серверу "привет" счетчик на единицу уменшил, остальные могут начать работу. Но машины переодически, сильно "умными" рабочими перезапускаються и клиент не щлет серверу ничего. В результате сервер не уменьшил счетчик и все остальные курят. как это можно разрулить?
Записан
MikeP
Участник
*
Offline Offline

Сообщений: 6


Просмотр профиля WWW
« Ответ #1 : Ноября 19, 2004, 08:58:07 am »

в корне менять идею синхронизации
Записан
leha
Участник
*
Offline Offline

Сообщений: 3


Просмотр профиля WWW
« Ответ #2 : Ноября 19, 2004, 09:25:46 am »

Возникла мысль по таймауту проверять жив клиент или нет, и принудительно сбрашивать флаг что устройство занято. Как узнать жив клиент или нет если пид его известен?
Записан
darkelf
QOR.Moderator
*****
Offline Offline

Сообщений: 259


Просмотр профиля
« Ответ #3 : Ноября 19, 2004, 10:01:36 am »


printf("client is %s
", (kill(pid_of_client, 0) == -1) ? "dead" : "alive" );
Записан
leha
Участник
*
Offline Offline

Сообщений: 3


Просмотр профиля WWW
« Ответ #4 : Ноября 19, 2004, 10:06:28 am »

дык не хотелось бы его пытаться убивать пока он жив, тем более он на другой ноде.
Записан
MikeP
Участник
*
Offline Offline

Сообщений: 6


Просмотр профиля WWW
« Ответ #5 : Ноября 19, 2004, 10:21:41 am »

а зачем серверу синхронизации самому проверять клиента?
прошел таймаут, если клиент за это время не откликнулся сам (типа keep-alive не прислал) - грохнуть его на всякий случай и сказать остальным, что все ок...
Записан
darkelf
QOR.Moderator
*****
Offline Offline

Сообщений: 259


Просмотр профиля
« Ответ #6 : Ноября 19, 2004, 10:26:56 am »

leha
дык не хотелось бы его пытаться убивать пока он жив

kill(pid, 0) проверяет существование процесса с указанным pid-ом, при этом никаких сигналов не посылается..
leha
,тем более он на другой ноде.
а по подробнее, uname -a?
Записан
leha
Участник
*
Offline Offline

Сообщений: 3


Просмотр профиля WWW
« Ответ #7 : Ноября 19, 2004, 11:01:06 am »

qnx 4.25 просто сервер и клиенты на разных машинах. Хотя наверное раз виртуальный канал создаеться, то и пид будет соответсвовать процессу. Send ведь нормально отрабатываеться. Спасибо попробую так и реализовать.
Записан
Evgeniy
Jr. Member
**
Offline Offline

Сообщений: 73


Просмотр профиля
« Ответ #8 : Ноября 19, 2004, 06:07:49 pm »

А не проще ли попробовать прикрутить для этих целей какой-нибудь спулер печати? Судя по исходной постановке ваш сервер работает именно как спулер...
Записан
Страниц: [1]
  Печать  
 
Перейти в: