2016-02-04 2 views
0

Я вызываю несколько запросов (10) в то же время HTTP GET method.Here метод вызова будет создавать разные потоки (например, Thread 1, Thread 2 ....)java - несколько HTTP-запросов одновременно с несколькими потоками в java

Caller Метод:

enter code here: for(int i=0;i<10;i++){Thread.currentThread().getId();HttpClient httpClient = new HtpClient(url);res = httpClient.get(5000);} 

Затем запрос ударит вход приложения точки.Фид точку входа будет создавать новые темы для каждого запроса (как нить 11 темы 12 ....).

enter code here//public void DoProcess(){Thread.currentThread().getId();// New threads for each request.else........} 

Но я хочу знать, какой запрос потока вызывающего пользователя создал прикладную нить.

Как Thread 1 принадлежит Тема 11

Thread 2 belongs Thread 12 

Пожалуйста, дайте мне знать, как достичь этого.

+0

Когда поток 1 создает поток 11, вы передаете ссылку нити 1 на резьбу 11. –

ответ

0

Клиент подключается через TCP, поэтому есть сокет-клиент ip и порт. Я не знаю HTTPClient api наизусть, но если есть getClientPort(), вы должны иметь возможность распечатать время, имя потока и клиентский ip + порт. На сервере, независимо от того, что сокет будет иметь клиентский ip и порт тоже. Если это контейнер сервлетов, запрос сервлета имеет getRemoteAddress() и getRemotePort(). Там также вы можете распечатать время, ip + порт и имя потока. Если вы скопируете эти события в 2 таблицы, вы сможете присоединиться к ip + порту с допуском на время клиентского времени и времени сервера (попробуйте меньше, чем на 2 секунды, если предположить, что C и S находятся одновременно с NTP).

Другой тривиальный способ (но он изменяет полезную нагрузку http) заключается в том, чтобы вставить HTTP-запрос от клиента в http-запрос, указав текущее имя потока/tid. Пример: «my_custom_remote_thread_id: Thread-11». Таким образом, на сервере вы можете вывести заголовок запроса, чтобы указать имя/tid клиентского потока.