我正在写一个使用Sinatra
的终点,我将从客户那里接收原始pdf并需要处理pdf以供内部使用。现在PDF处理需要一段时间,我不一定希望客户端等待处理完成并冒着timeout
(504
)的风险。而是想调用另一个处理pdf处理的方法,同时用适当的代码回应客户端。使用Sinatra的最佳方式是什么?Sinatra的“火与忘”电话
0
A
回答
1
所以有几个环节进行,所以让我崩溃的是将要发生的各个步骤:
- 客户端上传了一个PDF文件:这取决于PDF的规模和速度的连接,这可能需要一段时间。在等待上传时,您的Web进程正在忙于接收数据,并且无法处理任何其他客户端的请求。
- 然后,您需要处理上传的文件,将其存储在某处,可能会以某种方式对其进行处理。如果您将所有这些都作为请求流程的一部分来完成,那么您就有更多时间处理这一请求,无法为其他客户提供服务。
解决后者这些问题,操纵或处理上传资产的典型方法是使用后台作业队列,如Sidekiq(http://sidekiq.org)。您将所需的数据存储在某个地方,保留足够的信息以知道要处理的内容(例如,存储相关信息的模型的数据库ID,文件名等),然后将所有必需的信息传递到后台工作。然后你有单独的工作进程来完成它的工作,但它们不是你web进程的一部分,所以它们不会阻止其他客户端接收信息。
这仍然给我们带来了处理大量上传的问题,幸运的是,它也有解决方案。利用亚马逊拥有的所有网络容量,并让客户端将文件直接上传到S3,完成时他们可以只发布文件名给您,然后您可以将其排入您的工作人员的上一步,然后让它全部发生在后台。这篇博文对如何使用回形针将它连接在一起做了很好的说明http://blog.littleblimp.com/post/53942611764/direct-uploads-to-s3-with-rails-paperclip-and
相关问题
- 1. 春季背景/火与遗忘处理
- 2. 电话与OpenTok
- 3. 电话与twilio
- 4. c#中的异步火灾和遗忘#
- 5. 跨Windows的Ruby Sinatra会话
- 6. 与Breeze.js打电话
- 7. 与电话号码
- 8. QT开始外部过程(火与遗忘)
- 9. 电话ManagementObjectSearchert.Get()与InvalidCastException的
- 10. C#火和忘记考虑因素
- 11. 火和从WCF服务内忘记
- 12. 动作<T>火和遗忘?
- 13. Sinatra与Rails
- 14. 与Sinatra的delayed_job的Rakefile
- 15. 国际电话与twilio
- 16. 编辑$ _SESSION与JS电话
- 17. C#Asynchron电话与WCF
- 18. 与Twilio拨打电话
- 19. 制作与Sinatra的日历
- 20. Sinatra和未设置的会话变量
- 21. 在JSX文件中的Ruby Sinatra会话?
- 22. 获得从火力地堡的图像,而不通过电话
- 23. 使用freeswitch将SIP电话与真实电话桥接起来
- 24. 自动电话号码与Windows 8电话拨号
- 25. 问题采摘与电话号码,并比读电话号码
- 26. 如何拨打电话与IVR与S4B
- 27. jQuery的电话后与笨失败
- 28. 面料不能打电话与nohup的
- 29. 奇怪的bug与电话ios
- 30. 与SIM相关的电话号码
有几个项目在单个请求之外实现作业队列。虽然通常与Rails一起使用(并且网上的大多数示例都会显示rails示例),但它们通常也可以从Sinatra很好地使用。示例是[delayed_job](https://github.com/collectiveidea/delayed_job),[resque](https://github.com/resque/resque)或[Sidekiq](http://sidekiq.org/)。这就是说,你的问题仍然非常广泛,StackOverflow不适合广泛的体系结构问题或寻找合适的工具来使用。你应该让自己的分析适合你。 – 2015-03-30 21:13:32