2015-11-16 5 views
1

Когда я отлаживаю свое серверное приложение, использующее Restlet, клиент (который является мобильным приложением) бросает исключение TimeoutException, не получая данные, но мое серверное приложение не знает. Приложение предполагает, что клиент получил свои данные. Как мое приложение может обнаружить, что клиент не получил данные?Как мое приложение обнаруживает преждевременное разъединение клиента?

Вариант использования не отлаживается, но я могу представить, что сервер может быть достаточно медленным, чтобы клиент мог исключить исключение тайм-аута или другие причины преждевременного отключения, которое серверное приложение не замечает.

Один из путей, который я могу предпринять, заключается в создании подтверждения приема полученных данных на уровне приложения. Но это усложняет мое приложение.

ответ

3

Вы не можете, но вам также не обязательно. Если клиент не получил данные, он всегда может попросить снова. Протоколы RESTful действительно должны поддерживать такие вещи.

Например, если клиент делает POST, который выполняет некоторую операцию, то он должен быть в состоянии либо:

1) Повторно ПОСТ одни и те же данные, чтобы выполнить операцию только если оно не имеет уже сделано и вернуть данные ответа, которые он, возможно, пропустил раньше. Это часто выполняется с каким-либо идентификатором транзакции, сгенерированным на клиенте или на сервере в предыдущем запросе; или

2) Проверьте, удалось ли выполнить операцию, и повторите попытку, если это не произошло, или повторно запросите данные ответа, если это произойдет. Для этого часто требуется какой-то ранее установленный идентификатор транзакции.

Кроме того, если вы можете попасть в ситуацию, когда фактический пользователь не знает, успешно ли выполнена какая-либо операция, должен быть некоторый пользовательский интерфейс, который он может посетить, чтобы проверить его статус.

+0

Правда, для большинства приложений. Мое приложение может получать blob данных, токен, с сервера, или нет. Токен не дублируется, не может быть двух копий токена, когда клиент получает его, сервер удаляет его. Но клиент не знает заранее, есть ли токен или нет. В настоящее время я теряю токены. Из того, что вы говорите, я должен реализовать уровень подтверждения на сервере, что сервер удаляет только токен, когда клиент подтверждает его получение в отдельном сообщении. – Christine

+0

Да, это нормально. Конечно, вы также должны учитывать, что клиент, возможно, не захочет перезвонить. –

 Смежные вопросы

  • Нет связанных вопросов^_^