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