我使用ajax上传照片,操作和上传到s3需要很长时间。我听说最好在后台完成这些任务。我的应用程序需要等待照片上传。但是,如果我选择背景方式,那么我将需要使用websockets或重复ajax来检查结果(链接到s3)(我对此不高兴)。 为什么在控制器(前景)中进行硬计算太糟糕了? 现在我使用Torquebox(Jruby),据我所知它具有完美的并发性。这是否意味着等待上传到s3不会占用资源,所有这些都可以正常工作? 请在我的情况下写下背部/前部地面的优缺点。谢谢!Rails中的前景或背景图像操作(Jruby,Torquebox)
0
A
回答
1
通常认为不好的做法是阻止对第三方服务的网络请求上的Web请求处理程序。如果该服务变得缓慢或不可用,则无论您使用的是何种Ruby,都会阻塞您的所有Web进程。这就是你所说的“前景”。
本质上讲,这是您的当前设置(在前景)的流量:
- 用户上载网站上的一个图像和需要的控制器接收所述请求。
- 您的控制器向012请求同步请求s3。这是一个阻止请求。
- 你的控制器等待
- 你的控制器等待
- 你的控制器(继续)等待
- 最后,(这是不保证的)你收到来自S3的回应和你的代码继续并呈现你定的视图/ JSON /文字/等。
显然步骤3-5是为您的服务器非常不好的消息,正如我前面所说,这名工人/线程/进程(根据您的Ruby/Rails服务器框架),直到响应将被“举起”从s3收到(这可能永远不会发生)。
这里是相同的流动与在前端一些JavaScript帮助通知后台作业:
- 用户上载网站上的一个图像和需要的控制器接收所述请求。
- 您的控制器创建一个新线程/进程向s3发出请求。这是非阻塞的方法。您在引用s3图像src的记录上设置了一个标记,例如完成:false,并且您的代码很好地继续到步骤3。您的新线程/进程将是等待s3响应的那个人,并且当s3响应时您将设置“已完成”标志为true。
- 您呈现您的视图/ json/text/etc,并固有地释放您的工人/线程/进程这个请求...好消息!
为了娱乐前端东西:
- 你的客户端接收的响应,触发在前端JavaScript来启动的setInterval状重复的函数“坪'你的服务器每隔3秒钟,你的后端控制器会检查你之前设置的“完成”标志是否为真,如果是,则响应/呈现为真。
- 您的客户端JavaScript收到您的回复,并继续ping(直到您指定它应该放弃)或停止ping,因为您的应用程序回应为真。
我希望这能让您走上正确的道路。我认为为这个答案编写代码是次要的,因为它好像你在寻找优点和缺点。对于实际的实施想法,我会看看以下内容:
相关问题
- 1. Android中的背景和前景图像
- 2. 作为当前设置的背景图像查看背景?
- 3. 背景图像作为固定背景
- 4. 背景或前景线程?
- 5. 花式背景中的背景图像?
- 6. 在背景图像背景图像
- 7. celltable - 如何使用图像作为celltable背景(或行背景)
- 8. 背景图片上的背景图像
- 9. 带前景和背景的wpf按钮作为图像
- 10. 如何显示iPhone应用程序的背景图像或前景图像
- 11. 背景颜色藏汉作为背景图像中不工作
- 12. 操作栏背景
- 13. 背景图像
- 14. 背景图像
- 15. 图像背景
- 16. 图像背景
- 17. 背景图像
- 18. CSS:背景颜色的背景图像
- 19. 图像作为背景div
- 20. gif图像作为背景
- 21. 背景图像不工作
- 22. 背景图像不工作
- 23. SVG作为背景图像
- 24. 背景图像不工作
- 25. 背景图像不工作
- 26. 前景背景系统和实时操作系统的区别
- 27. 无法在背景颜色前带背景图像
- 28. 在背景颜色前悬停更改透明背景图像
- 29. 设置背景或背景图片
- 30. JavaFX中的背景图像
1.我阅读了关于线程池的内容,并且(据我所知)我在jruby(java)中的应用程序将使用固定线程池。这意味着当系统资源结束时,一次性的大量图像上传可以停止所有线程。我对么? 2.你能回答吗,可重复的要求是否足够好?对于优秀的客户端,我需要每秒发送至少一个请求。 (Websocket是否有这种用法?我不会在第一个版本中使用它们,而是为了将来的想法。) 非常感谢! – makrusak 2015-02-23 11:56:54
@makrusak,如果您正在从应用服务器同步上传到第三方,那么很多图片上传可能会消耗您的最大请求池大小是正确的。正如我上面解释的那样,这会因请求排队而放慢速度。 “可重复请求”是什么意思?和'每秒一个请求'?如果您在提出请求时更喜欢来自客户端和来自客户端的实时响应,则Websockets非常出色。正如我所解释的那样,这不会绕过同步上传问题。 Websockets只会取代'pinging'ajax请求。让我知道你是否需要任何帮助。 – mkralla11 2015-02-26 17:57:06