Журнал ожидания сокета com.sun.HttpServer - PullRequest
5 голосов
/ 18 июля 2011

Что означает отставание сокета?

например, у меня есть веб-сервис

@WebService
public class Calculator {
public int sum(int a, int b) {
    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    return a + b;
}

public static final int threadCount = 10;

public static void main(String[] args) throws IOException {
    Executor manyThreads = Executors.newFixedThreadPool(threadCount);
    HttpServer server = HttpServer.create(new InetSocketAddress(8989), threadCount);
    server.setExecutor(manyThreads);
    server.start();

    Endpoint ep = Endpoint.create(new Calculator());
    HttpContext context = server.createContext("/calc");
    ep.publish(context);
}
}

и клиент веб-сервиса

 public static void main(String[] args) throws IOException {
    CalculatorService service = new CalculatorService();
    final Calculator calc = service.getCalculatorPort();

    Executor executor = Executors.newFixedThreadPool(100);

    for (int i = 0; i < 1000000; ++i) {
        executor.execute(new Runnable() {
            public void run() {
                try {
                    int currentThreads = runningThreads.incrementAndGet();
                    int res = calc.sum(10, 10);
                    System.out.println("Running threads: " + currentThreads + " Result: " + res);
                } catch (ClientTransportException e) {
                    System.out.println("connection refused");
                } finally {
                    runningThreads.decrementAndGet();
                }
            }
        });
    }

    System.in.read();
}

на сервере только 10 рабочих потоковДля backlog установлено значение 10, поэтому может быть 10 принятых соединений и 10 соединений, ожидающих в очереди, и в любом другом соединении будет отказано, я прав?

Может быть не так, как я не получаю ClientTransportException.

Не могли бы вы объяснить, что происходит с соединениями и почему не существует ClientTransportException.

1 Ответ

2 голосов
/ 18 июля 2011

Это очередь соединений, которые уже были приняты TCP до того, как вы вызвали accept(), чтобы узнать о них в вашем приложении.Установка низкого значения, такого как 10, довольно бессмысленно: TCP увеличит это значение до своего собственного минимума, который может быть 50 или 500 в зависимости от платформы, и если этого не произойдет, все, что он сделает, - это приведет к бессмысленномулучше оставить это значение по умолчанию.

...