【问题标题】:Rails or Sinatra app - how to maintain background threadsRails 或 Sinatra 应用程序 - 如何维护后台线程
【发布时间】:2014-04-22 14:29:12
【问题描述】:

我想在 Sinatra 或 Rails 服务器上维护一个数据结构(没关系),所有到达它的 HTTP 请求都可以访问它(即支持并发修改)。我不想依赖数据库或类似的东西,因为这不允许我编写回调来修改此数据结构并将并发块放在 HTTP 响应线程上。

由于 HTTP 是无状态的,显然没有简单的方法来实现这一点。

如何在不依赖外部程序和中间件的情况下,在后台为到达 HTTP 服务器的所有请求创建一个流程来维护数据?是否需要我修改 Rails 或 Sinatra 来实现这一点?除了红宝石还有其他选择吗?

【问题讨论】:

  • 如果下一个请求到达拓扑中的不同进程怎么办?还是集群中的另一台机器?
  • 没想到这个应用程序在一个集群中,只是一个具有多个线程/进程的服务器。即使在那种情况下,是否有适用于多服务器系统的中间件解决方案?

标签: ruby-on-rails ruby multithreading http sinatra


【解决方案1】:

使用 Sinatra 时,您只需在应用程序末尾的线程中编写代码:

http://blog.markwatson.com/2011/11/ruby-sinatra-web-apps-with-background.html

使用它,您可以维护一个工作人员,即使在 http 请求进出时也能执行操作。

Sinatra 还有before 和after 方法,它们分别在每个请求之前和之后运行。

因此,如果您想在处理每个请求之前将数据添加到数据结构中,您可以:

before do puts request end

使用这些工具,您可以轻松实现您想做的事情。

【讨论】:

  • 谢谢,没想到这么简单。
猜你喜欢
  • 1970-01-01
  • 2014-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-08
  • 1970-01-01
相关资源
最近更新 更多