Забавная проблема.Как протокол без сохранения состояния, я не верю, что HTTP включает метод «распознавания», когда клиент закрывает соединение.Я действительно ничего не знаю о том, что делает SalesForce, но вот некоторые стандартные решения HTTP (я предполагаю, что веб-сокеты отсутствуют).
Самый простой, но склонный к ложным срабатываниям
Поскольку вы знаете максимальный тайм-аут, время вашего запроса Синатра.Если это заняло более 60 секунд, предположите, что время истекло, и отправьте электронное письмо.Очевидно, что это может привести к ошибкам где-то около 59-61 секунд, и вы можете получить некоторые ложные срабатывания и ложные отрицания.
Сложнее, но склонны к совершенству
Вы можетереализовать «чек квитанции».Ваш ответ JSON будет содержать UID.Если ваш запрос SalesForce не тайм-аут, отправьте UID обратно в качестве квитанции.Тогда Sinatra будет знать, что все в порядке.
Если приложение Sinatra не получит квитанцию в течение n секунд / минут (потому что у SalesForce истекло время ожидания, и вы никогда не получили UID), приложение Sinatra может отправить электронное письмоили что угодно) через n секунд / минут.
Это может быть реализовано несколькими способами.Самое простое, вероятно, включает в себя базу данных, скрипт и cron.Самое сложное, вероятно, связано с потоковой передачей HTTP (сейчас это тривиально в Sinatra 1.3) и, возможно, многопоточными или четными серверами, такими как Thin или Zbattery.Я был бы рад разработать.