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

Ihar Viarheichyk i.viarheichyk at sam-solutions.net
Tue Apr 22 14:06:07 MSD 2003


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

-- 
Igor Vergeichik
ICQ 47298730




More information about the Ruby mailing list