Обнаружение сбоя HTTP-запроса на сервере - PullRequest
1 голос
/ 14 марта 2019

Я разрабатываю HTTP-сервер, который обрабатывает транзакционные запросы от клиентов. Они будут связываться через крайне ненадежную беспроводную сеть, поэтому я беспокоюсь о согласованности данных на серверной БД. Вот как я обрабатываю POST запросы:

void doPost(request, response)
{
    transaction = newTransaction();
    processBody(request);
    transaction.commit();
}

Когда я никогда не получаю запрос, нет проблем. Клиент просто получает timeout error, и транзакция не выполняется. Однако что произойдет, если ответ будет потерян в сети? Конечно, клиент все равно получит timeout error, но на этот раз транзакция будет завершена на сервере, и клиент об этом не узнает! Это прискорбный случай, с которым мне нужно иметь дело.

Итак, мой вопрос: как определить, был ли получен ответ, и откатить транзакцию в противном случае?

Я кодирую свое серверное приложение с помощью JavaEE и размещаю его на Glassfish.

1 Ответ

0 голосов
/ 18 марта 2019

Хорошо, я понял это. Стек протоколов HTTP / TCP не имеет средств для обнаружения отбрасывания ответа . Тем не менее, он прекрасно обрабатывает запрос на сброс , так что мне нужно только отправить запрос POST с сервера на клиент, например:

void doPost(request, response)
{
    transaction = newTransaction();
    try {
        var result = processBody(request);
        sendPOSTToClient(result);
        transaction.commit();
    catch (IOException e) {
        transaction.rollback(); // network partition occured
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...