Главная страница


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : vilfred                              2:5020/400     22 Jan 2003  22:27:09
 To : All
 Subject : IPC запутался, как процесс убивать?
 -------------------------------------------------------------------------------- 
 
 
 Привет всем!!
 
 Hарод, есть такая задача. Есть канал связи между
 двумя серверами. Один из них снаружи недоступен ни
 по какому протоколу, потому что он подключен через
 сотовый модем, но из него можно ходить по любому
 адресу и использовать любые протоколы.
 
 на некотором сервере есть порт, в который пишутся
 данные. Там на этом порту на сокете сидит сервер,
 который валит данные в сокет.  Hа сервере, который
 сидит за gprs, стоит клиент, который подключается
 по tcp к серверу и слушает данные.
 
 Проблема в том, что канал связи нестабилен. борюсь
 с нестабильностью канала. Сервер за сотовым
 телефоном стоит в деревне, была там выделенка, но
 она промерзла, так на местной АТС сказали, ну
 собсно в деревне вырубают свет так, что могут
 отключить АТС от электричества, т.е. вырубается
 канал связи. Это этот обрыв я могу вычислить при
 помощи пинга. что и делаю. Дальний сервер, куда
 клиент ходит, слушает сокет так-же настабилен в
 двух смыслах, могут вырубить сеть и может
 отвалится сервер, который висит на данном порту и
 валит в него данные. Естественно когда пишешь
 клиента, который коннектится к сокету, то он не
 подконнекчивается к сокету, если сервер висящий на
 этом сокете выключен. 
 
 Т.е. возникают три проблемы со связью:
 
 1) вырубается электричество на местной АТС и
 падает выделенка
 2) АТС работает, но ваырубается дальний
 сервер(ремонт в сети, сбои маршрутизаторов и т.д.).
 3) дальный сервер работает, АТС работает, но по
 каким то причинам отвалился от сокета сервер(т.е.
 подсоединиться к серверу невозможно из-за того,
 что к сокету не подсоединен сервер).
 
 При всем при этом к серверу, подключенному через
 сотовый телефон GPRS, извне из интернета
 достучаться невозможно, так как он  находится за
 файрволом биллайна.
 
 Исходя из посталвеных условий я пишу программу
 клиент, которая долбится по сокету на тот сервак,
 который не за GPRS.
 
 Чтобы отследить  падение электричества и прочие
 недоступности я клиент разветвляю на два процесса,
 один из которых постоянно пингует сервер и при
 условии что пинги доходят за определенное время,
 дает работать другому процессу, который собственно
 и является клиентом, слушающим сокет.  Если пинги
 не доходят, то процесс с пингом перезапускает
 процесс с клиентом, читающий сокет. Это работает.
 
 Осталось отследить, включен ли на удаленном
 сервере сокет, т.е. можно ли к нему
 подконнектится. Пинги идут, все в норме, пингующий
 процесс не гробит клиента, читающего из сокета.
 Если программа клиент начинает работать и
 коннкектится к серверу, на котором не работает
 сокет-сервер то программа отрабатывает со словами
 "ждем поднятия сервера на 2345 порт на удаленнной
 машине". но в том случае, если сервер
 отваливается во время чтения из сокета, программа
 по идее, должна перезапусать клиент, и я не знаю
 как обработать $SIG{USR1} в другом процессе чтобы
 перезапускать клиента снова и снова, пока сервер,
 пишущий в сокет не поднимется. Пускать этот сигнал
 из одного процесс другому я умею методом kill
 'USR1' => $parent_pid. И даже умею печатать слово
 print "Сервер, висящий на нужном сокете упал\n",
 но я не умею убивать клиента так, чтобы он снова
 возродился, хотя умею убивать клиента если не идут
 пинги.
 
 Сама программа:
 
 http://genphys.phys.msu.ru/~dmitriy/client.txt
 
 Вобщем в том случае, если сокет-сервер
 отваливается, то я пишу kill 'INT' => $buff;
 послыая сигнал другому процессу, что надо
 перезапустить чтение из сокета, но оно не
 перезапускает, либо делает его зомби, либо убивает
 парента(парент пингует, чайлд читает из сокета).
 Что делать - не пойму просто... :(((
 
 Спасибо если ответите, хотя вопрос на самом деле
 непростой и как детальнее объяснить - не знаю... 
 
 дима
 
 -- 
 TEAM [Маньяки] 
 Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru
 --- ifmail v.2.15dev5
  * Origin: Talk.ru (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 IPC запутался, как процесс убивать?   vilfred   22 Jan 2003 22:27:09 
 Re: IPC запутался, как процесс убивать?   vilfred   04 Feb 2003 23:27:01 
Архивное /ru.perl/6488b05ca43d.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional