繁体   English   中英

Web服务器上的图像处理

[英]Image processing on a web server

我想在服务器上运行图像处理算法,可以轻松地与Web应用程序交互。 图像处理算法很重,并且在定制的库中不可用。 目前我在Heroku上使用Ruby on Rails作为我的网站。

实现这一目标的最佳架构是什么? 从网站上获取图像 - 运行图像处理算法 - 在网站上显示

我的大多数图像处理代码都是在C / C ++上。

我可以直接从Ruby on Rails调用C / C ++代码吗? 这可能在Heroku上吗?

或者我应该设计一个系统,其中C / C ++代码公开了一些可以由Ruby on Rails服务器调用的API?

Heroku通常使用小型虚拟机实例,因此根据处理的重量程度,它可能不是架构的最佳选择。 但是,如果你使用它,我会这样做:

使用后台任务gem来进行处理。 让它在一个单独的进程上运行(在Heroku术语中称为worker而不是dyno)。 延迟工作是一个经过实践检验的后台任务解决方案,提供了大量有关将其集成到Heroku中的在线信息,但是有更新的工作,如Sidekiq在现代版本的Ruby中使用新的线程系统。 他们会允许在dyno中完成所有操作,但我会说保持所有后台处理远离webserver dynos会很有用,所以Delayed Job(或类似)会很好。

至于集成C / C ++,我还没有必要这样做。 但是,我知道可以创建集成C或C ++代码并本机编译的gem。 只要你使用ruby而不是JRuby,我不认为Heroku应该对它们有问题。 还有其他方法可以实现这一点,特别是关于这个主题的SO问题,例如

如何在ruby中调用C ++函数

看来你需要创建一个扩展,然后创建一个包含它的gem。 这些链接可能有帮助也可能没有用。

http://www.rubyinside.com/how-to-create-a-ruby-extension-in-c-in-under-5-minutes-100.html

http://guides.rubygems.org/gems-with-extensions/

我建议制作一个gem,因为我认为可能很难将库或可执行文件放到Heroku实例上。 如果您不想将gem公开,可以将gem存储在供应商目录中。

总的来说,我会将网络服务器上传到S3或存储图像的任何地方(这可以直接在浏览器中完成,而无需使用网络服务器作为AWS JS API的垫脚石。请查看宝石来帮助。)

然后,Web服务器可以请求后台任务来处理图像。

如果你没有存储它们,事情会变得有趣......如果你正在使用后台任务,你将需要一个数据库,所以你可以将图像数据作为数据库中的blob传递给worker。

我真的不会在网络服务器dyno中进行所有处理,除非你真的只是偶尔点击这个东西。 对于多个用户,您很快就会遇到瓶颈。

后台进程可以在映像表行上设置一个标志,以便Web服务器可以在处理完成时让用户知道。 (您可以使用AJAX在上传完成屏幕​​上使用JS轮询信息)

当然,根据许多因素,还有许多其他方法可以实现这一点。

抱歉答案含糊不清,但这个问题非常开放。

祝好运。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM