stream_socket_server: İstemci tarayıcısı rastgele durduruluyor?

0 Cevap php

Aşağıda bir PHP CLI komut dosyası (Neden? Elimde çok fazla zamanım olduğundan) sıfırdan inşa ediyorum deneysel bir http sunucu uygulaması kısmi koddur. Aşağıdaki örnek, daha yakından bu fonksiyon PHP'nin kılavuzu sayfasını eşleşir. Bir tarayıcı (şimdiye kadar test iki ayrı sistemin Firefox veya IE8) ile bu sunucu uygulaması bağlarken alıyorum sorun, tarayıcı sunucuya boş bir istek yükü gönderir ve kabaca her 1 6 sayfa yükler iptal eder.

Sunucu konsolu her zaman "[istemci bilgi] ile bağlantılı" görüntüler. Ancak, yaklaşık 1 6 bağlantıları bir "Müşteri istek boş" hata neden olur. Hiçbir hata başlık / body response başarısız soketine yazmak söylüyorum verilir. Tarayıcınız onu vermek ne okumaya devam edecektir, ama ben ne olduğunu bilmeden müşterinin amaçlanan isteğini yerine getirmek edemiyor bu kullanışlı değildir.

<?php

$s_socket_uri = 'tcp://localhost:80';
// establish the server on the above socket
$s_socket = stream_socket_server($s_socket_uri, $errno, $errstr, 30) OR
    trigger_error("Failed to create socket: $s_socket_uri, Err($errno) $errstr", E_USER_ERROR);
$s_name = stream_socket_get_name($s_socket, false) OR
    trigger_error("Server established, yet has no name.  Fail!", E_USER_ERROR);
if (!$s_socket || !$s_name) {return false;}

/*
   Wait for connections, handle one client request at a time
   Though to not clog up the tubes, maybe a process fork is
   needed to handle each connection?
*/
while($conn = stream_socket_accept($s_socket, 60, $peer)) {
    stream_set_blocking($conn, 0);

    // Get the client's request headers, and all POSTed values if any
    echo "Connected with $peer.  Request info...\n";
    $client_request = stream_get_contents($conn);
    if (!$client_request) {
        trigger_error("Client request is empty!");
        }
    echo $client_request."\n\n";  // just for debugging

    /*
      <Insert request handling and logging code here>
    */

    // Build headers to send to client
    $send_headers = "HTTP/1.0 200 OK\n"
        ."Server: mine\n"
        ."Content-Type: text/html\n"
        ."\n";

    // Build the page for client view
    $send_body = "<h1>hello world</h1>";

    // Make sure the communication is still active
    if ((int) fwrite($conn, $send_headers . $send_body) < 1) {
        trigger_error("Write to socket failed!");
        }

    // Response headers and body sent, time to end this connection
    stream_socket_shutdown($conn, STREAM_SHUT_WR);
    }

?>

Istenmeyen sayısını düşürmek için herhangi bir çözüm 0'a aşağı iptal, ya da daha istikrarlı iletişim almak için herhangi bir yöntem olacak? Bu benim sunucunun sonu, ya da sadece tipik tarayıcı davranışları üzerindeki çözülebilir?

0 Cevap