Yanıt beklemeden POST İstekleri gönderme?

4 Cevap php

Ben müşterilerine gelen isteklere yanıt veren bir basit REST hizmetini yazıyorum. PHP tüm.

Benim endişe benim sunucu bir isteğine yanıt istemci tarafı "Tamam" yanıtı geri gönderme çok yavaş ise, bu kaynakları kilitlediğini bitebileceğini olmasıdır.

Nasıl herhangi bir yanıt için bekleyin, ama POST veri gönderildikten sonra yerine immidiately çıkmak değil ayarlayarak lib_curl yoluyla bir POST isteği gönderebilirim?

Bu bile mümkün mü? Teşekkür ederiz!

4 Cevap

Sadece HTTP ile bir cevap almadan veri gönderebilirsiniz olamaz. HTTP isteği zaman gider -> tepki. Yanıt (hiçbir metin ile basit bir 200 gibi), sadece çok kısa olsa bile, bir yanıt olması gerekir. Ve her HTTP soket bu yanıtı bekler.

Eğer yanıt umurumda değil, sizin isteklerinizi yapan sunucuya bir işlem eklemek olabilir, ve size (, arka planda çalışan bir hizmeti gibi kendisine sadece push isteğiniz veri denetleme bir istek veritabanı ve yeni bir giriş eklenmiştir her zaman) isteği başlangıç. Eğer uyumsuz isteği yapacak ve kısa sürede size stack bu isteği ekledi çıkmak verebilir yolu.

Meouw dediği gibi, aynı zamanda, müşteri php ile yapıyoruz herhangi bir iletişim parçası değildir. Php bir sunucu tarafı dilidir, yani istemci bir web sayfası (php dosyası) istediğinde, server bu dosyayı çalıştırır (ve tüm isteklerini php dosya durumlarını yapar) ve daha sonra müşteriye sonucu döndürür .

Ben bu denedim hiç, ama çok düşük bir değere CURLOPT_TIMEOUT ayarını hile yapabilir. 0 veya 0.1 sahipsiniz.

Ancak, bağlantı bağlantı zaten kurulduğunda aktif olarak iptal edilir ve zaman aşımı ulaşmış olup olmadığını, müşteri ile bu nasıl davranacağını cURL ve bilmiyorum. Sen denemek gerekir. PHP betikleri, arıyorsan belki ignore_user_abort() komut iki şekilde üzerinden çalıştırabilirsiniz emin olabilirsiniz.

http://curl.haxx.se/mail/lib-2002-05/0090.html

libcurl has no asynchronous interface. You can do that yourself either by using threads or by using the non-blocking "multi interface" that libcurl offers. Read up on the multi interface here:

http://curl.haxx.se/libcurl/c/libcurl-multi.html

Çoklu arayüz PHP örneği burada:

http://www.phpied.com/simultaneuos-http-requests-in-php-with-curl/

İşte:

ob_end_clean();
header("Connection: close\r\n");
header("Content-Encoding: none\r\n");
header("Content-Length: 1");
ignore_user_abort(true);

ve curl:

 curl_setopt($curl, CURLOPT_TIMEOUT_MS, 1);
 curl_setopt($curl, CURLOPT_NOSIGNAL, 1);