PDA

Просмотр полной версии : Отправка асинхронных запросов на PHP


xssww2
18.04.2009, 09:12
Ну типа зделал два варианта:
1: fsockopen (на некоторых хостингах запрещена)
2: curl_multi_* (curl не везде установлен)

Мож кто подскажет как можно еще отправить запрос чтоб скрипт не ждал ответа?

Сокеты на потом)

.:EnoT:.
18.04.2009, 12:46
Обычная эмуляция...и не прям обязательно использовать курл или fsockopen
Можно хоть file_get_contents() и fopen(), хоть через расширение сокетов (socket_create и т.д.).
Ну и плюс к этому всему неблокирующий режим и в цикле вызывать скрипт из самого себя, передавая пост/гет параметры...
Тогда эмуляция ещё как-то получится.....но в целом для пхп это не имеет смысла

Gar|k
18.04.2009, 12:59
Да асинхронных наверно и нету в PHP... но чем плох AJAX ? ) вот тебе и асинхронность. Мож че и не правильно говорю в программинге асинхроность я делал посредством потоков, а сокеты всегда юзал блокирующие... в PERL есть fork
в php насколько я помню тоже есть многопоточность...

Zedi
18.04.2009, 15:54
в php насколько я помню тоже есть многопоточность...
ну нееету там многопоточности, сообщения про многопочность в PHP практически каждый день

Gar|k
18.04.2009, 16:04
набрал в поиске многопоточность в php
вот урл как раз по данной теме
http://blog.gtalex.ru/mnogopotochnost-v-php
http://www.stableversion.com/node/3
http://habrahabr.ru/blogs/php/40245/

в общем xssww2 учись гуглить ) пригодится

xssww2
18.04.2009, 18:06
в общем xssww2 учись гуглить ) пригодится

Учись читать

xssww2
18.04.2009, 18:12
Можно хоть file_get_contents() и fopen()
Ну и плюс к этому всему неблокирующий режим и в цикле вызывать скрипт из самого себя, передавая пост/гет параметры...


а как через fopen? пробывал вроде как, он не возвращает управление до тех пор, пока вызываемый скрипт не выполнится

.:EnoT:.
18.04.2009, 18:25
fopen не возвращает никаких данных, она возвращает лишь дескриптор.
А управление над потоками это задача функций stream_

xssww2
18.04.2009, 19:46
fopen не возвращает никаких данных, она возвращает лишь дескриптор.
А управление над потоками это задача функций stream_

Я не грил что он возвращает данные)
Проясню ситуацию: есть сервер который выполняет свой скрипт и посылает запрос на выполнение скрипта на другом сервере
так вот, если юзать fopen, то управление в 1й скрипт не вернется пока не выполниться 2й скрипт на другом сервере, а нужно не ждать выполнения скрипта на другом серваке. ну вот)

Можно хоть file_get_contents() и fopen()_
не позволяют такое (как я тестил), или ты знаешь способ?

D Mak
18.04.2009, 19:59
Zedi
других языков я канешн не знаю, но расскажи как работает "настоящая многопоточность"?

Gifts
18.04.2009, 20:15
xssww2 Насчет второго не уверен

$ctx = stream_context_create(array('http' => array('timeout' => 0 )));
@file_get_contents('http://localhost/1.php', 0, $ctx);



$f = fopen('server.name');
stream_set_blocking($f, 0);
fwrite($f,"GET / HTTP/1.1\r\nHost: server.name\r\nConnection: Close\r\n\r\n");
fclose($f);

xssww2
18.04.2009, 20:43
xssww2 Насчет второго не уверен

$ctx = stream_context_create(array('http' => array('timeout' => 0 )));
@file_get_contents('http://localhost/1.php', 0, $ctx);



а с таймаутом известная фигня), только не знаю что может "0" означать для этой функции
надо пытнуть