Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Client Connection Pool / 25 сообщений из 26, страница 1 из 2
26.02.2015, 17:09
    #38889807
micoloss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Client Connection Pool
Доброго времени суток!
Задача следующая. Есть JAX WS сервис, который через пул соединений делает запрос на сторонний TCP сервер. Каждое соединение в пуле работает в отдельном потоке, соответственно ответ от TCP сервера обрабатывается в run(). Логика следующая, при обращению в сервис создается пакет, который отправляется в свободное на данный момент соединение в пуле, затем получает ответ от TCP сервера, возвращает соединение в пул и отдает ответ в сервис. Вопрос в следующим, каким образом правильнее всего дождаться ответ TCP сервера и передать этот ответ в метод сервиса, откуда запрос был инициирован, поскольку ответ от TCP сервера может придти с задержкой. Спасибо!
...
Рейтинг: 0 / 0
26.02.2015, 17:19
    #38889817
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Client Connection Pool
Самым правильным вариантом был бы Continuation, но, как на зло, его нет в Java. Но есть java.util.concurrent.Future - ссылка на будущий результат. Всё зависит от архитектуры кода, который этот пул использует.
...
Рейтинг: 0 / 0
26.02.2015, 17:22
    #38889823
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Client Connection Pool
micoloss,
вообще без пула - долгое соединение?
...
Рейтинг: 0 / 0
26.02.2015, 17:25
    #38889829
micoloss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Client Connection Pool
Предполагается большое количество запросов к сервису, поэтому и решено использовать пул, чтобы сэкономить время на подключение к TCP серверу
...
Рейтинг: 0 / 0
26.02.2015, 17:35
    #38889842
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Client Connection Pool
micolossПредполагается большое количество запросов к сервису, поэтому и решено использовать пул, чтобы сэкономить время на подключение к TCP серверу
а кто источник запросов?
Есть понятие сессия. Без всякого пула.
100 клиентов, в начале работы - создале 100 коннектов.
И пускай хоть миллион запросов отправляют.
...
Рейтинг: 0 / 0
26.02.2015, 17:42
    #38889850
micoloss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Client Connection Pool
Petro123,

Мне не нужно чтоб к TCP серверу было 100 коннектов, должно быть ограниченное количество и чтобы эти коннекты использовались по мере необходимости.
...
Рейтинг: 0 / 0
26.02.2015, 17:46
    #38889854
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Client Connection Pool
micolossМне не нужно
очень обоснованно.
Тем более, что асинхронность не нужна - нужно ждать ответа сервера.
Удачи!
...
Рейтинг: 0 / 0
26.02.2015, 17:51
    #38889861
micoloss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Client Connection Pool
Petro123,

SOAP не поддерживает сессионность, каждое обращение уникальное
...
Рейтинг: 0 / 0
26.02.2015, 17:59
    #38889879
DDiver
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Client Connection Pool
Как вариант пул потоков, ограниченный числом.
Создаём таск, отдаём пулу на обработку, и ждём на Future когда таска закончится. Profit.
...
Рейтинг: 0 / 0
26.02.2015, 20:58
    #38890031
WGA
WGA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Client Connection Pool
micolossДоброго времени суток!
Задача следующая. Есть JAX WS сервис, который через пул соединений делает запрос на сторонний TCP сервер. Каждое соединение в пуле работает в отдельном потоке, соответственно ответ от TCP сервера обрабатывается в run(). Логика следующая, при обращению в сервис создается пакет, который отправляется в свободное на данный момент соединение в пуле, затем получает ответ от TCP сервера, возвращает соединение в пул и отдает ответ в сервис. Вопрос в следующим, каким образом правильнее всего дождаться ответ TCP сервера и передать этот ответ в метод сервиса, откуда запрос был инициирован, поскольку ответ от TCP сервера может придти с задержкой. Спасибо!Клиент JAX-WS поддерживает пулирование исполнения. Возможно хватит.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
import com.cdyne.ws.weatherws.ArrayOfWeatherDescription;
import com.cdyne.ws.weatherws.Weather;
import com.cdyne.ws.weatherws.WeatherSoap;

import java.util.concurrent.Executors;

/**
 *         Date: 26.02.2015.
 *         Time: 20:35
 */
public class Main {
    public static void main(String[] args) {
        Weather service = new Weather();
        service.setExecutor(Executors.newFixedThreadPool(10));
        WeatherSoap port = service.getWeatherSoap();
        ArrayOfWeatherDescription weatherInformation = port.getWeatherInformation();
        System.out.println(weatherInformation);
    }
}
...
Рейтинг: 0 / 0
26.02.2015, 21:30
    #38890039
WGA
WGA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Client Connection Pool
Прошу прощения, поторопился. Executor здесь не для пула...
...
Рейтинг: 0 / 0
27.02.2015, 11:34
    #38890362
micoloss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Client Connection Pool
DDiverКак вариант пул потоков, ограниченный числом.
Создаём таск, отдаём пулу на обработку, и ждём на Future когда таска закончится. Profit.

Хорошо, допустим как дождаться ответа от таска понятно. Не понятно каким образом отправя сообщение TCP серверу через сокет, который уже подконнекчен и находится в пуле соединений и работает в отдельном потоке, дождаться ответа от TCP сервера и вернуть этот ответ в таск.
...
Рейтинг: 0 / 0
27.02.2015, 11:50
    #38890388
DDiver
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Client Connection Pool
micoloss,

зачем вам вообще пул tcp соединений? Клиенты же ходят по HTTP ? В общей массе времени, время на создание соединения, я думаю будет почти не заметно.
Или же вы уже делали тесты и они показали что что основные потери на создании соединений?
...
Рейтинг: 0 / 0
27.02.2015, 12:25
    #38890450
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Client Connection Pool
micolossХорошо, допустим как дождаться ответа от таска понятно. Не понятно каким образом отправя сообщение TCP серверу через сокет, который уже подконнекчен и находится в пуле соединений и работает в отдельном потоке, дождаться ответа от TCP сервера и вернуть этот ответ в таск.
Future.get() блокирует поток пока не появится результат.
...
Рейтинг: 0 / 0
27.02.2015, 12:27
    #38890454
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Client Connection Pool
DDiverзачем вам вообще пул tcp соединений? Клиенты же ходят по HTTP ? В общей массе времени, время на создание соединения, я думаю будет почти не заметно.
Или же вы уже делали тесты и они показали что что основные потери на создании соединений?
Поддерживаю. Отправка запроса, обработка и получение ответа займут намного больше времени чем пересоздание соединения.
Поэтому процентный выигрыш от пере-использования TCP соединения видится сомнительным.
...
Рейтинг: 0 / 0
27.02.2015, 12:56
    #38890499
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Client Connection Pool
согласен с двумя предыдущими ораторами, правда в практике был случай когда сервер постоянно досили, он был под https, и если уж соединение установлено, его было чертвоски обидно терять
...
Рейтинг: 0 / 0
27.02.2015, 13:22
    #38890541
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Client Connection Pool
micolossPetro123,

SOAP не поддерживает сессионность, каждое обращение уникальное
Фраза требует уточнения.
...
Рейтинг: 0 / 0
27.02.2015, 14:35
    #38890650
micoloss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Client Connection Pool
BlazkowiczDDiverзачем вам вообще пул tcp соединений? Клиенты же ходят по HTTP ? В общей массе времени, время на создание соединения, я думаю будет почти не заметно.
Или же вы уже делали тесты и они показали что что основные потери на создании соединений?
Поддерживаю. Отправка запроса, обработка и получение ответа займут намного больше времени чем пересоздание соединения.
Поэтому процентный выигрыш от пере-использования TCP соединения видится сомнительным.

Скажем так, у TCP сервера к которому идут запросы от сервиса, есть некая процедура регистрации соединения в своей системе которая занимает определённое количество времени, поэтому на каждый пользовательский запрос от веб сервиса создавать новое соединение - не мой случай.
...
Рейтинг: 0 / 0
27.02.2015, 15:16
    #38890754
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Client Connection Pool
micolossСкажем так, у TCP сервера к которому идут запросы от сервиса, есть некая процедура регистрации соединения в своей системе которая занимает определённое количество времени, поэтому на каждый пользовательский запрос от веб сервиса создавать новое соединение - не мой случай.
Ну, тогда вопрос же решен? Нет? Что не так с Future?
...
Рейтинг: 0 / 0
27.02.2015, 16:46
    #38890889
micoloss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Client Connection Pool
Blazkowicz,

Если я правильно Вас понял, должно быть что-то типа такого:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
public class MyConnect extends Thread
{
.....
}

public class MyTask(MyPacket packet) implements Callable {

public Boolean call() throws Exception {
	Boolean isAcceptingRequests = null;
	
	MyConnect c = MyConnectsPool.getFree();	
	c.send(packet);	
        .......
	return isAcceptingRequests;
}
}
public Boolean sendRequest(MyPacket packet) throws UnresponsiveException, InterruptedException {
	MyTask t = new MyTask(packet);
	Future future = TASK_POOL.submit(t);
	try {
		Boolean isAcceptingRequests = future.get();
		return isAcceptingRequests;
	} catch (ExecutionException e) {
		throw new UnresponsiveException(e.getCause());
	}

}



Как дождаться ответа от сервера, после выполнения c.send, делать while(true) и ждать пока допустим что-то типа c.ResponsePaketReady() не вернет true и завершить цикл, или как-то по другому ?
...
Рейтинг: 0 / 0
27.02.2015, 18:33
    #38890998
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Client Connection Pool
micolossКак дождаться ответа от сервера, после выполнения c.send, делать while(true) и ждать пока допустим что-то типа c.ResponsePaketReady() не вернет true и завершить цикл, или как-то по другому ?
Не врубаюсь о каком именно API речь? Возьмите любой блокирующий. Даже NIO может работать в блокирующем режиме.
...
Рейтинг: 0 / 0
27.02.2015, 19:03
    #38891025
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Client Connection Pool
Мой вопрос повис в воздухе. У SOAP нет сеанса. Забавненько. Но если-бы мы говорили
о Restful то не было-бы вообще никакого сеанса тоже.
...
Рейтинг: 0 / 0
27.02.2015, 19:11
    #38891033
micoloss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Client Connection Pool
mayton,

А что SOAP поддерживает сессионность? У него есть keep-alive или что-то в этом роде?
...
Рейтинг: 0 / 0
27.02.2015, 19:34
    #38891053
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Client Connection Pool
micolossА что SOAP поддерживает сессионность? У него есть keep-alive или что-то в этом роде?
Вы прыгаете с одного на другое. Начинаете тему про TCP, затем почему-то подключаете SOAP. Это же разные уровни модели OSI.

По-моему здесь вообще не нужны никакие потоки, Future и прочия. Нужен один единственный блокирующий пул сокетов. Который через SocketFactory надо скормить вашему JAX-WS клиенту. Всё. Все вызовы блокирующие и клиентские потоки будут ждать результатов или высвобождения сокетов в пуле.
...
Рейтинг: 0 / 0
27.02.2015, 19:38
    #38891055
micoloss
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Client Connection Pool
Blazkowicz,

Тут просто выше писали что через сессии все можно организовать, вот я и отвечаю.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Client Connection Pool / 25 сообщений из 26, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]