Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обмен данными используя только одно соединение 
:(
    Опции темы
romann2004
Дата 10.2.2010, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 10.2.2010

Репутация: нет
Всего: нет



Существует ли способ совершить обмен данными используя только одно соединение (pfsockopen или fsockopen) без fclose?
Т.е.: отправил - получил - отправил - получил и т.д. Другими словами - есть ли способ передать серверу информацию о том, что следующий запрос совершенно новый и что высылается новый заголовок?
PM MAIL   Вверх
bars80080
Дата 10.2.2010, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 1
Всего: 315



наверняка не скажу, но учитывая, что заголовки не могут идти после тела запроса, имхо, вряд ли
PM MAIL WWW   Вверх
sTa1kEr
Дата 11.2.2010, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: нет
Всего: 146



От чего же? Отправляйте заголовок Connection: keep-alive, тогда сервер не будет разрывать соединение и по окончании передачи ответа вы сможете по тому же соединению отправить новый запрос.
PM MAIL   Вверх
romann2004
Дата 11.2.2010, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 10.2.2010

Репутация: нет
Всего: нет



Цитата(sTa1kEr @ 11.2.2010,  14:36)
От чего же? Отправляйте заголовок Connection: keep-alive, тогда сервер не будет разрывать соединение и по окончании передачи ответа вы сможете по тому же соединению отправить новый запрос.

Connection: keep-alive - перепробовал на все различные способы, не катит. Может что-то не так делаю. Пожалуйста, можно пример?
PM MAIL   Вверх
sTa1kEr
Дата 11.2.2010, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: нет
Всего: 146



Тогда покажите как вы делаете. Схема должна быть следующая:

1. Коннектитесь к серверу
2. Отправляете запрос серверу
3. Читаете заголовки ответа
4. Парсите заголовки
5. Определяете размер тела (только если сервер не передает тело методом chunked)
6. Читает тело ответа.
7. Если в заголовках ответа от сервера не было Connection: close, то идете к п.2

Если не ошибаюсь, то примерно так.


Это сообщение отредактировал(а) sTa1kEr - 11.2.2010, 18:32
PM MAIL   Вверх
romann2004
Дата 12.2.2010, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 10.2.2010

Репутация: нет
Всего: нет



Цитата(sTa1kEr @ 11.2.2010,  18:31)
Тогда покажите как вы делаете. Схема должна быть следующая:

1. Коннектитесь к серверу
2. Отправляете запрос серверу
3. Читаете заголовки ответа
4. Парсите заголовки
5. Определяете размер тела (только если сервер не передает тело методом chunked)
6. Читает тело ответа.
7. Если в заголовках ответа от сервера не было Connection: close, то идете к п.2

Если не ошибаюсь, то примерно так.

Так это всё понятно, я уже и заголовки парсил, и тупо на закачку ответа длинной в 1 байт 30 секунд ожидания ставил. Всё без толку. Очередной запрос fputs или вообще не функционирует или глохнет на 
Notice: fputs() [function.fputs]: send of 293 bytes failed with errno=10053
Или я где-то затупил?

Код
error_reporting(E_ALL);
$host="www.yandex.ru";
$errno=0;$errstr=0;$fp=pfsockopen($host, "80", $errno, $errstr, 20);
if($fp) {
for ($i=0;$i<3;$i++) {
$request = "GET / HTTP/1.0\r\n";
$request .= "Host: $host\r\n";
$request .= "Connection:Keep-Alive\r\n";
$request .= "\r\n";
fputs($fp, $request);$ret='';
while(!feof($fp)) {$ret.=fgets($fp,128);}
echo '<br>'.$i.') length = '.strlen($ret);} fclose($fp);
} else {echo '<br>pfsockopen - FALSE';}


Это сообщение отредактировал(а) romann2004 - 12.2.2010, 11:37
PM MAIL   Вверх
sTa1kEr
Дата 12.2.2010, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: нет
Всего: 146



Ну так а кто будет проверять заголовки ответа?
Цитата(sTa1kEr @  11.2.2010,  19:31 Найти цитируемый пост)
Если в заголовках ответа от сервера не было Connection: close


Собственно сервер может не поддерживать keep alive и всегда закрывать соединения после отправки ответа. В этом случае, конечно-же, придется открывать соединение заново.

Добавлено через 2 минуты и 54 секунды
Код

$ telnet google.com 80                                                                                                                                                                                           
Trying 74.125.87.147...                                                                                                                                                                                                        
Connected to google.com.                                                                                                                                                                                                       
Escape character is '^]'.                                                                                                                                                                                                      
GET / HTTP/1.1                                                                                                                                                                                                                 
Host: google.com                                                                                                                                                                                                               
Connection: keep-alive                                                                                                                                                                                                         

HTTP/1.1 301 Moved Permanently
Location: http://www.google.com/
Content-Type: text/html; charset=UTF-8
Date: Fri, 12 Feb 2010 11:04:29 GMT   
Expires: Sun, 14 Mar 2010 11:04:29 GMT
Cache-Control: public, max-age=2592000
Server: gws                           
Content-Length: 219                   
X-XSS-Protection: 0                   

<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>                                         
<H1>301 Moved</H1>                                                            
The document has moved                                                        
<A HREF="http://www.google.com/">here</A>.                                    
</BODY></HTML>

GET / HTTP/1.1
Host: google.com
Connection: keep-alive

HTTP/1.0 301 Moved Permanently
Location: http://www.google.com/
Content-Type: text/html; charset=UTF-8
Date: Fri, 12 Feb 2010 11:05:08 GMT
Expires: Sun, 14 Mar 2010 11:05:08 GMT
Cache-Control: public, max-age=2592000
Server: gws
Content-Length: 219
X-XSS-Protection: 0
Connection: Keep-Alive

<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="http://www.google.com/">here</A>.
</BODY></HTML>
^]
telnet> \q
Connection closed.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Сеть | Следующая тема »


 




[ Время генерации скрипта: 0.0491 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.