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

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

SOAP не поддерживает сессионность, каждое обращение уникальное
...
Рейтинг: 0 / 0
Client Connection Pool
    #38889879
DDiver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вариант пул потоков, ограниченный числом.
Создаём таск, отдаём пулу на обработку, и ждём на Future когда таска закончится. Profit.
...
Рейтинг: 0 / 0
Client Connection Pool
    #38890031
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
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
Client Connection Pool
    #38890039
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
Прошу прощения, поторопился. Executor здесь не для пула...
...
Рейтинг: 0 / 0
Client Connection Pool
    #38890362
micoloss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DDiverКак вариант пул потоков, ограниченный числом.
Создаём таск, отдаём пулу на обработку, и ждём на Future когда таска закончится. Profit.

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

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

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

Скажем так, у TCP сервера к которому идут запросы от сервиса, есть некая процедура регистрации соединения в своей системе которая занимает определённое количество времени, поэтому на каждый пользовательский запрос от веб сервиса создавать новое соединение - не мой случай.
...
Рейтинг: 0 / 0
Client Connection Pool
    #38890754
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
micolossСкажем так, у TCP сервера к которому идут запросы от сервиса, есть некая процедура регистрации соединения в своей системе которая занимает определённое количество времени, поэтому на каждый пользовательский запрос от веб сервиса создавать новое соединение - не мой случай.
Ну, тогда вопрос же решен? Нет? Что не так с Future?
...
Рейтинг: 0 / 0
Client Connection Pool
    #38890889
micoloss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Client Connection Pool
    #38890998
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
micolossКак дождаться ответа от сервера, после выполнения c.send, делать while(true) и ждать пока допустим что-то типа c.ResponsePaketReady() не вернет true и завершить цикл, или как-то по другому ?
Не врубаюсь о каком именно API речь? Возьмите любой блокирующий. Даже NIO может работать в блокирующем режиме.
...
Рейтинг: 0 / 0
Client Connection Pool
    #38891025
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мой вопрос повис в воздухе. У SOAP нет сеанса. Забавненько. Но если-бы мы говорили
о Restful то не было-бы вообще никакого сеанса тоже.
...
Рейтинг: 0 / 0
Client Connection Pool
    #38891033
micoloss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,

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

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

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


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