Я работаю над приложением C# mobile
, которое требует значительного взаимодействия с веб-сервером PHP
. Тем не менее, приложение также должно поддерживать «автономный режим», поскольку соединение будет осуществляться через cellular network
. Эта сеть может отбрасывать запросы в случайное время. Проблема, с которой я столкнулась с предыдущими приложениями «Offline Mode», заключается в том, что когда запрос приводит к таймауту, сервер может или не мог обработать этот запрос. В случаях, когда отправка запроса более одного раза создавала дубликат, это проблема. Я прошел через это и придумал следующую идею.Был ли сервер успешно получен запрос
- Мобильный телефон устанавливает значение заголовка, например
UniqueRequestID: 1
, которое будет отправлено с запросом. - При получении запроса, сервер PHP добавляет
UniqueRequestID
к текущей сессии пользователя$_SESSION['RequestID'][] = $headers['UniqueRequestID'];
- Сервер реализует GetRequestByID, который возвращает истину, если
id
существует для текущего сеанса или ложным, если нет. В качестве альтернативы, это могло бы вернуть результат кэширования запроса.
Это, кажется, несколько надежный способ увидеть, успешно ли связался запрос с сервером. В мобильном устройстве, после повторного подключения к серверу, мы проверяем, был ли получен запрос. Если да, пропустите это, ожидая ответа offline message
и перейдите к следующему.
Вопрос Я изобрел колесо здесь? Является ли этот метод склонным к неудаче (или я иду вниз по кроличьей дыре)? Есть ли лучший способ/альтернатива?
- Я сделал это для других разработчиков здесь, и мы подумали, что это кажется очень простым, подразумевая, что эта «система», скорее всего, уже существует где-то.
- Извинения, если мои навыки Google не позволяют мне сегодня.
Я на самом деле думал о базе данных в первую очередь. Я думал, что система, основанная на сеансах, будет препятствовать глубокому проникновению кроличьей дыры. База данных IE означает, что нам нужно настроить сценарий очистки или управлять отдельным сервером. Я чувствую себя с сессией, мы разрешаем 90% проблемы с 10% работы, если мы сначала ее осуществим в сеансе. Возможно, мы могли бы переключиться/масштабироваться до базы данных позже, если мы обнаружим, что истекшая сессия становится реальной проблемой. Уровень транспортного уровня и уровень обмена сообщениями (я думаю) был бы немного лишним, но это очень хорошая информация. – teynon
Чтобы добавить к вашему ответу, чтение документации ReliableMessaging предполагает, что нам действительно не нужно искать подтверждение сообщения, но вместо этого логика приложения должна обрабатывать эти ситуации. http://www.infoq.com/articles/no-reliable-messaging – teynon