Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > ожидание ответа от сервера по средством сокетов


Автор: Sniper 18.3.2010, 10:15
В продолжении темы: http://forum.vingrad.ru/forum/topic-294532.html

Вкратце текущая реализация:

есть web-сервер и он посредством сокетов связывается с другим сервером и отправляет ему команды. Ответы на web-сервер приходят в виде строк, где первый параметр тип ответа:

"1" команда принята и получен ответ
"2" ошибка
"3" команда принята, но ещё не обработана

так вот когда приходит ответ "3" требуется повторить команду, а если "1", то выполнить необходимые далее действия.

в коде выглядит так:

Код

start:
$cmd = 'postsomecmd ';
 $out = cmdsend($cmd, "192.168.0.4"); // IP сервера, которому посылаются команды (cmdsend открывает сокет и отправляет команду)
 if( $out[0] == '1' )
 {
  // ответ хороший, команда выполнилась, выполняем нужные действия
 }
 if( $out[0] == '2' )
 {
  echo 'ошибка';
 }
 if( $out[0] == '3' )
 {
  // команду нужно перепослать т.е. заново выполнить $cmd = 'postsomecmd ';  $out = cmdsend($cmd); с каким нибудь таймаутом
  goto start; 
 //про goto это я придумал просто так, но должно работать. Хочется чего-то менее костыльного для ДАННОГО КОДА!
 }


p.s текущую реализацию протокола менять нельзя

Автор: wil 18.3.2010, 10:41
Sniper, вместо goto сделай рекурсивный вызов функции.

Автор: Sniper 18.3.2010, 10:47
Цитата(wil @  18.3.2010,  07:41 Найти цитируемый пост)
Sniper, вместо goto сделай рекурсивный вызов функции. 

а как?

Автор: wil 18.3.2010, 10:56
Sniper, сделай функцию, в нее запихни весь этот код. В коде где надо запустить заново из-за ошибки вместо goto поставить вызов функции себя самой. Только продумай чтобы не было бесконечного круга, когда функция будет бесконечно себя вызывать. Например передавай в функцию номер ошибки какая уже по счету и с какого-то количества ошибок делай return 0; а не вызов функции самой себя.

Автор: Sniper 18.3.2010, 11:03
хорошо, понял впринципе, а с таймаутом как быть?

Автор: wil 19.3.2010, 12:36
А sleep() чем не устраивает?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)