0

私のhttpサーバーの初期コードは次のとおりです。

public class Server3 {
    public void accept() {
        try {
            int port = 8081;
            ServerSocket serverSocket = new ServerSocket(port);
            while (true) {
                final Socket clientSocket = serverSocket.accept();
                System.out.println("accepted.");
                new Thread() {
                    @Override
                    public void run() {
                        try {
                            BufferedReader in = new BufferedReader(
                                    new InputStreamReader(
                                            clientSocket.getInputStream()));

                            String s;
                            while ((s = in.readLine()) != null) {
                                System.out.println(s);
                                if (s.isEmpty()) {
                                    break;
                                }
                            }
                            // Processing a request
                            sleep(9000000);
                            in.close();
                            clientSocket.close();
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                }.start();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

http パイプラインを実行するために、Opera を選択しました。Opera はそれを実装しており、デフォルトで有効になっています。そのため、2 つのタブを開いて localhost:8081 に移動しますが、それでも 1 つのリクエストしか受け取りません。

GET / HTTP/1.1
User-Agent: Opera/9.80 (X11; Linux i686) Presto/2.12.388 Version/12.15
Host: localhost:8081
Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1
Accept-Language: en-US,en;q=0.9
Accept-Encoding: gzip, deflate
Pragma: no-cache
Cache-Control: no-cache
Connection: Keep-Alive

上記のコードの小さなバリエーションも試しました。serverSocket.accept() の直後に sleep() への別の呼び出しを追加し、そのスリープ中に同じソケットを使用する場合に備えて、ブラウザーから 2 つの要求を発行しました。しかし、結果は同じでした。

同じブラウザーから 2 つの要求を発行し、サーバーがまだ応答を送信せずにそれらを受信できるように、このコードをどのように修正する必要がありますか (http パイプラインが使用されるように)。

4

0 に答える 0