Java Клиент сокета, отправляющий несколько одновременных запросов к одному и тому же сокету - PullRequest
0 голосов
/ 27 мая 2020

У меня есть метод в службе 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 для нескольких одновременные запросы, которые будут работать намного лучше?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...