Как повторно использовать TcpClients в режиме синхронной блокировки? - PullRequest
1 голос
/ 18 января 2012

У меня есть tcpclient, который подключается к бэкэнд-системе, отправляющей XML-запросы и получающей XML-ответы.

Бэкэнд требует, чтобы клиент вошел в систему и установил некоторые параметры среды, прежде чем можно будет выполнять какие-либо запросы. Это дорогостоящая операция, поэтому имеет смысл создать tcpclient и оставить его открытым для повторных запросов.

Бэкэнд, который мне сказали, оптимизирован для обработки многих соединений и по соображениям производительности, я хотел бы иметь множество соединений tcpclients.

Запросы представлены в виде списка, содержащего тысячи элементов.

Мой вопрос: как лучше создать группу повторно используемых подключенных tcpclients, чтобы я мог выполнять несколько одновременных запросов из списка (скажем, 10 за раз), какой шаблон подходит для этого сценария, и есть ли примеры, которые я могу изучить лучшая практика от?

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

QueryService service = new QueryService(server, port, user, pass, params, app);

foreach(var item in queries)
{
    service.ExecuteRequest(item);
}

service.Disconnect();

1 Ответ

1 голос
/ 18 января 2012

Вам нужен пул потоков или Пул объектов шаблон. По сути, вы можете создать пул Service объектов, а затем, когда любой элемент (функция или объект) клиентского приложения должен получить доступ к службе - он может просто ссылаться на объект службы на основе некоторых критериев.

Чтобы это было успешным, у вас должен быть запрос без состояния , чтобы при выборе произвольного объекта службы для запроса к какому-либо серверу история не создавала проблем.

...