У меня типичная связь между клиентом и сервером: клиент отправляет данные на сервер, сервер обрабатывает их и возвращает данные клиенту. Проблема заключается в том, что процесс может занимать довольно много времени - порядка величины - минуты. Есть несколько подходов, которые могут быть использованы для решения этой проблемы.
- Установите соединение и поддерживайте его, пока операция не будет завершена и клиент не получит ответ.
- Установить соединение, отправить данные, закрыть соединение. Теперь обработка выполняется, и после ее завершения сервер может установить соединение с клиентом для отправки данных.
- Установите соединение, отправьте данные, закройте соединение. Обработка происходит. клиент спрашивает сервер каждые n минут / секунд, если операция завершена. Если обработка завершена, клиент извлекает данные.
Мне было интересно, какой подход будет наилучшим для использования. Есть ли какой-то "де-факто" стандарт для решения этой проблемы? Насколько «дорого» открытие сокета в Java? Решение 1. мне кажется довольно неприятным, но 2. и 3. могли бы. Проблема с решением 2. заключается в том, что серверу необходимо знать, на каком порту клиент слушает, а в решении 3. добавлены некоторые издержки сети.