Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Взаимодействие с сокетами
 
 автор: Ziq   (29.10.2006 в 22:22)   письмо автору
 
 

Я использую переделанный под себя вот этот скрипт

<? 
  
// передаваемые данные 
  
$name "Login"
  
$pass "Password"

  
$hostname "chat.my"
  
$fp fsockopen($hostname,80); 

  
// формируем строку с отправляемымы данными 
  
$data "name=".urlencode($name)."&pass=".urlencode($pass)."\r\n\r\n"
  
$headers "POST /w/handler.php HTTP/1.1\r\n" 
            
."Host: $hostname\r\n" 
            
."Content-type: application/x-www-form-urlencoded\r\n" 
            
."Content-Length: ".strlen($data)."\r\n\r\n"
  
// отправляем 
  
fwrite($fp,$headers.$data); 

  
// на этом впринципе отправка закончена, 
  // для уверенности можно прочитать один 
  // байт или все содержимое: 
  
while(!feof($fp)) 
    echo 
fread($fp,1024); 

  
fclose($fp); 
?>

http://www.softtime.ru/forum/read.php?id_forum=7&id_theme=15857

Мне не понятно, почему происходит все очень медленно (около 10 секунд) хотя я использую локальное обращение к данным. Чем вызвана такая задержка?

   
 
 автор: Trianon   (30.10.2006 в 09:44)   письмо автору
 
   для: Ziq   (29.10.2006 в 22:22)
 

Вероятно, потому, что ВЫ оставляете открытым соединение, а потом приходится ждать, когда оно закроется по тайм-ауту.

   
 
 автор: Ziq   (30.10.2006 в 17:42)   письмо автору
 
   для: Trianon   (30.10.2006 в 09:44)
 

Нельзя ли по-подробнее? Как закрыть соединение?

   
 
 автор: Trianon   (30.10.2006 в 18:32)   письмо автору
 
   для: Ziq   (30.10.2006 в 17:42)
 


<?  
  
// передаваемые данные  
  
$name "Login";  
  
$pass "Password";  

  
$hostname "chat.my";  
  
$fp fsockopen($hostname,80);  

  
// формируем строку с отправляемымы данными  
  
$data "name=".urlencode($name)."&pass=".urlencode($pass)."\r\n\r\n";  
  
$headers "POST /w/handler.php HTTP/1.0\r\n"  
            
."Host: $hostname\r\n"  
            
."Content-type: application/x-www-form-urlencoded\r\n"  
            
."Content-Length: ".strlen($data)."\r\n"
            
."\r\n";  
  
// отправляем  
  
fwrite($fp,$headers.$data);  

  
// на этом впринципе отправка закончена,  
  // для уверенности можно прочитать один  
  // байт или все содержимое:  
  
while(!feof($fp))  
    echo 
fread($fp,1024);  

  
fclose($fp);  
?>

   
 
 автор: Ziq   (30.10.2006 в 18:54)   письмо автору
 
   для: Trianon   (30.10.2006 в 18:32)
 

я так понял изменилась вот эти строки

            ."Content-Length: ".strlen($data)."\r\n" 
            ."\r\n"; 

Ничего не поменялось :(.

Что делать вообще не знаю... помогите, пожалуйста.

   
 
 автор: kasmanaft   (30.10.2006 в 18:58)   письмо автору
 
   для: Ziq   (30.10.2006 в 18:54)
 

Возможно имелось ввиду

."Content-Length: ".strlen($data)."\r\n"  
."Connection: Close"."\r\n\r\n";

   
 
 автор: Ziq   (30.10.2006 в 19:04)   письмо автору
 
   для: kasmanaft   (30.10.2006 в 18:58)
 

Этот вариант тоже заработал!!! А какой лучше?

   
 
 автор: Trianon   (30.10.2006 в 19:09)   письмо автору
 
   для: kasmanaft   (30.10.2006 в 18:58)
 

Да нет... имелось в виду именно то, что было написано. :)

   
 
 автор: Trianon   (30.10.2006 в 18:58)   письмо автору
 
   для: Ziq   (30.10.2006 в 18:54)
 

Нет. Это не главное.
Изменилась строка

  $headers = "POST /w/handler.php HTTP/1.0\r\n" 

   
 
 автор: Ziq   (30.10.2006 в 19:03)   письмо автору
 
   для: Trianon   (30.10.2006 в 18:58)
 

Как то ни странно (для меня), но заработало!!! Мне только не понятно, почему надо использовать версию 1.0, а не 1.1? Объясните, пожалуйста.

   
 
 автор: Trianon   (30.10.2006 в 19:08)   письмо автору
 
   для: Ziq   (30.10.2006 в 19:03)
 

потому что протокол 1.0 закрывает соединение сразу. А 1.1 (по умолчанию) ждет еще одного запроса.

   
 
 автор: Ziq   (30.10.2006 в 19:10)   письмо автору
 
   для: Trianon   (30.10.2006 в 19:08)
 

Ну я так понимаю правильней использовать более современный протокол 1.1. Или есть какие-то проблемы связанные с его реализацией?

   
 
 автор: Trianon   (30.10.2006 в 19:17)   письмо автору
 
   для: Ziq   (30.10.2006 в 19:10)
 

при чем тут современный и несовременный?
Один предоставляет меньше опций - другой больше.

Правильно использовать тот, который реализует Ваши нужды. Раз нужды реализуют оба - значит можно применять младший. Сервер 1.1 всяко обработает запрос 1.0 Сервер 1.0 запрос 1.1 может и не суметь обработать.

В данном случае, в дело вступает еще один фактор. Протокол 1.0 Вы знаете, а протокол 1.1 - нет. Значит нужно применять 1.0, т.к. в 1.1 можно и дров наломать по незнанию. Что собственнно и произошло.
Имеетесь в виду не Вы конкретно, конечно, а автор того скрипта, который Вы взяли за основу.

   
 
 автор: Ziq   (30.10.2006 в 19:21)   письмо автору
 
   для: Trianon   (30.10.2006 в 19:17)
 

Наверно Вы правы... честно говоря это 2 опыт написания подобного скрипта.

Спасибо за ответ.

   
 
 автор: Ziq   (30.10.2006 в 18:56)   письмо автору
 
   для: Trianon   (30.10.2006 в 18:32)
 

Причем, отправка сообщение осуществляется значительно быстрее, чем получение...

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования