gpt4 book ai didi

ruby - 使用 Sinatra Web 服务处理客户端超时

转载 作者:太空宇宙 更新时间:2023-11-03 16:56:46 25 4
gpt4 key购买 nike

我是 Ruby 和 Sinatra 的新手,但我已经成功地想出了一个在 Heroku 上运行得很好的 Web 服务。我从 Salesforce.com 访问此 Web 服务。

我在 Salesforce/Apex 中使用的 HTTPRequest 类的最大超时为 60 秒。如果我达到该超时(或者,当我达到我用于测试目的的 1 秒超时时),我会在 Salesforce 端得到一个异常,我可以轻松处理。我感兴趣的是如何在 Sinatra 端处理这个问题。

如果我的客户端出现超时,并以某种方式关闭了连接,有没有办法在我的 Sintra 应用程序中“感知”到这一点?我想记录客户端超时,继续执行应用程序已启动的工作,然后发送电子邮件让用户知道超时后作业已完成。

我应该注意,当我现在确实超时时,Sinatra 应用程序愉快地完成了它正在做的事情,而且我猜,它返回了它应该返回的 JSON 数据。只是客户端没有任何东西可以获取该数据。

有什么想法吗?

最佳答案

有趣的问题。作为无状态协议(protocol),我认为 HTTP 不包含客户端关闭连接时“感知”的方法。我真的不知道 SalesForce 做了什么,但这里有一些标准的 HTTP 解决方案(我假设 Web Sockets 已经过时)。

最简单,但容易出现误报

既然您知道最大超时时间,请为您的 Sinatra 请求计时。如果花费的时间超过 60 秒,则假定超时并发送电子邮件。显然,这在 59-61 秒左右的任何时间都容易出错,并且您可能会得到一些误报和漏报。

更难,但更趋于完美

您可以实现“已读回执”。您的 JSON 响应将包含一个 UID。如果您的销售人员请求没有超时,请将 UID 作为收据发回。然后 Sinatra 就会知道一切正常。

如果 Sinatra 应用程序未在 n 秒/分钟内收到收据(因为 SalesForce 超时并且您从未获得 UID),Sinatra 应用程序可能会在 n 秒/分钟后发送电子邮件(或其他任何内容)。

这可以通过多种方式实现。最简单的可能涉及数据库、脚本和 cron。最困难的可能涉及 HTTP 流(现在在 Sinatra 1.3 中微不足道)和可能的多线程或事件服务器,如 Thin 或 Zbattery。我很乐意详细说明。

关于ruby - 使用 Sinatra Web 服务处理客户端超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7635885/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com