[Ruby] двунаправленный пайп

vic ismakaev viclists at mail.esoo.ru
Tue Apr 22 16:30:30 MSD 2003


22 Апрель 2003 16:06, Ihar Viarheichyk написал:
> On Tue, Apr 22, 2003 at 02:56:31PM +0600, vic ismakaev wrote:
> > Приветствую!
> > Постараюсь объяснить свою задачу:
> > Есть некий TCPserver с телнет-подобным пртоколом(вернее я его пытаюсь
> > реализовать).
> > Когда я к нему цепляюсь через сокет,он мне отдает поток данных(счетчик
> > чего-нибудь) в цикле loop вида
> >  loop {
> > 		sleep 10
> > 		@sock.write("Bla-bla-bla" + "\n")
> >
> > 	}
> > Эти данные я могу клиентом отловить и обрабботать.
> > Но при таком подходе у меня полчаеться бесконечный цикл и прервать его
> > можно только прибитием клиента или сервера или таймаутом.
> > Мне же хочеться получить двунаправленный пайп,чтобы клиент мог послать
> > какую-нибудь команду серверу для смены его поведения(прервать поток
> > данных,обнулить его,разорвать соединение и т.д).
> > Можно так сделать?
> >
> > Честно говоря,открывать второй сокет для команд очень не хочеться.
>
> Ну тогда нужно смотреть Kernel#select
>
> loop do
> 	res = select([@sock], [], [], 10)
> 	if res
> 		cmd = @sock.read
> 		.
> 		.
> 		.
> 	else
> 		@sock.write("Bla-bla-bla\n")
> 	end
> end
Спасибо.Помогло.
Только почему-то cmd = @sock.read не проходит.Вместо этого сделал cmd = 
@sock.sysread(20) - с линукса вводиться построчно(нормально),с В2К - 
посимвольно,в результате чего не могу вести ни одной команды.
Я ,правда,в качетсве основы использую tserver.rb,он и создает @sock.Может  в 
нем все дело. 
-- 
С уважением
Виктор В Исмакаев



More information about the Ruby mailing list