У меня есть метод в службе Spring, который является клиентом Socket. Метод отправляет сообщение в сокет и получает ответ. Этот клиентский метод будет вызываться несколькими одновременными потоками. Сервис Socket закодирован для правильной обработки всех нескольких одновременных запросов.
Следующий код - это то, как я в настоящее время закодировал клиента. Для каждого запроса я создаю новый объект Socket, отправляю запрос, получаю ответ и затем возвращаю ответ. Другой, не показанный код, правильно закрывает inputStrea, outputStream и socket.
public ResponseObject executeSocketCommand(Command command, SocketConfiguration socketConfiguration) throws Exception {
RequestContext request = new RequestContext();
request.command = command;
try {
request.socket = new Socket(command.getHost(), command.getPort());
request.outputStream = new DataOutputStream(request.socket.getOutputStream());
request.inputStream = new DataInputStream(request.socket.getInputStream());
sendRequest(request);
return receiveResponse(request);
} catch .....
}
sendRequest(request) {
request.outputStream.write(request.command.someData);
...
request.outputStream.flush();
}
Создает новый сокет для каждого запроса, правильный подход, который будет работать хорошо, или я должен создать сокет и поделиться этим объектом для всех запросов. Мне нравится этот подход, потому что он решает множество проблем с подключением, которые могут возникнуть в течение жизни процесса.
Это долго работающая веб-служба, поэтому создание сокета для каждого запроса аккуратно обрабатывается в любое время, когда сокет может закрыться из-за проблем с сетью или сам Socket Server мог быть выключен Я предполагаю, что если я использую объект Socket, я также смогу проверить статус подключения сокета для каждого запроса.
В общем, мой текущий подход верен, или есть способ поделиться объектом Socket для нескольких одновременные запросы, которые будут работать намного лучше?