[Moscow.pm] unix socket

Kaltashkin Eugene zhecka на gmail.com
Пт Май 23 23:29:10 PDT 2008


Dmitry E. Oboukhov пишет:
>> perlipc исползан вдоль и поперек.
>> поясню задачу. Есть связка server(15 тредов) + много клиентов которые
>> через unix socket с ним работают.
>> Если я цепляюсь не клиентом, а своим скриптом к unix сокету, то не вижу
>> ни начального ответа от сервера, при передаче данных
>> в сокет не вижу response. Также если цепляю клиента к созданному мной
>> unix сокету, то тоже ноль эффект. Поэтому хочу понять
>> что бегает внутри этого долбаного unix socket чтобы эмулировать данный
>> протокол. perlipc только рассказывает как якобы создать
>> unix socket, а не как его послушать и посмотреть.
>>     
> ах вот ты о чем.
>
> скорее всего цепляясь не клиентом ты не вписываешься в протокол и
> поэтому ничего не видишь.
>
> я бы сделал примерно так:
>
> написал бы классик вроде:
>
> package MyClass;
> use base qw(Net::Server::Single);
>
>
> sub process_request
> {
> 	my $socket=new IO::Socket::UNIX(Peer=>'сокет твоего сервера')
>
> 	// тут читаем из sidin и пишем в сокет
> 	// читаем из сокета и пишем в stdout
>
> 	// заодно тут же пишем логи кто кому чего сказал
> 	// итп
>
> }
>
> package main;
> my $wrapper=new MyClass(port=>'путь к твоему сокету|unix');
> $wrapper->run;
>
>
> ну и разглядывал бы логи:)
>
> только чтение/запись из двух сокетов  (один сокет и два пайпа
> std(in|out)) разруливать наверно надо при помощи функции select,
> хотя для начала можно попробовать "принять решение" что протокол
> там текстовый и просто почитать строки из клиента и поотдавать их
> серверу и наоборот.
> хотя если на какие-то однострочные запросы клиента сервер отвечает
> многострочным ответом, то все равно упрется в select.
>
> то есть для начала написать там код вида:
>
> my $line_from_client=<STDIN>;
> ... тут кладем в лог инфу о том что приняты данные от клиента
> print $socket $line_from_client;
> my $line_from_server=<$socket>;
> ... тут кладем в лог инфу что принято что-то от сервера
>
> но скорее всего залочится, попробуешь две-три строки принимать от
> сервера/клиента, ну и перейдешь на select ;)
>   
Спасибо. Попробую. Если все получится отпишусь.


Подробная информация о списке рассылки Moscow-pm