[Ruby] чтение из сокета неопределенного количества строк

vic ismakaev viclists at mail.esoo.ru
Thu May 8 11:27:57 MSD 2003


Спасибо всем ,кто помог мне в моем вопросе!
Из всех советов я вынес такой вывод для себя.
Чтение из сокета можно проводить 2мя способами(как минимум)
1) при помощи select() с циклом
if select [@sock],nil,nil,TIMEOUT
	while @sock.gets or @sock.readline
		обработка строк
	end
else 
	raise "exception"
end
2) непосредственным чтением в цикле через @sock.readline[gets]
Но в любом случае сервер должен возвращать какой-нибудь признак конца данных 
(".","Ok",EOF,etc),как того требуют соответствующие RFC.

Но еще я для себя вынес метод

while select [@sock],nil,nil,TIMEOUT
 	line=@sock.readline
end

pro) простота,не надо обрабатывать признак конца данных,серверу не надо 
генерировать этот признак конца данных
contra) при малом TIMEOUT мы можем вообще ничего не получть, при большом 
TIMEOUT клиент будет долго ждать окончания цикла.

P.S. надо будет в свой сервер добавит в свой сервер како-нибудь  флаг конца 
потока.

-- 
С уважением
Виктор В Исмакаев



More information about the Ruby mailing list