在ruby中实现多个异步操作

1u4esq0p  于 2022-12-22  发布在  Ruby
关注(0)|答案(1)|浏览(135)

我有一个与辛纳特拉构建的API。
当用户登录时,应用程序检查登录名和密码,并将cookie中的jwt_refresh_token发送到客户端,以允许用户保持登录状态。
我希望实现与用户状态相关的各种方法,但这些方法不需要延迟用户登录(即从数据库中删除过时的数据),因此后续的API调用会提供正确的答案。
我如何在Sinatra或Ruby中实现它呢?老实说,我甚至不知道它在英语中是怎么称呼的,这使得查找它变得相当复杂。

4uqofj5v

4uqofj5v1#

我不确定您要执行的操作,但假设其中一些是网络调用,一种方法是使用某种后台工作程序。
在任何情况下,无论您是通过工人还是Web控制器调用,都可以使用线程进行并行调用。
例如,考虑下面的代码,它创建了3个线程,并等待每个线程完成。

require 'net/http'

def get(url)
  uri = URI(url)
  response = Net::HTTP.get_response(uri)
  puts response.body
end

threads = []

threads << Thread.new {
    # assume that this is call to update the user
    get('https://jsonplaceholder.typicode.com/todos/1')
}

threads << Thread.new {
    # assume that this is call to delete something    get('https://jsonplaceholder.typicode.com/posts/2')
}

threads << Thread.new {
    # some more network call
    get('https://jsonplaceholder.typicode.com/posts/3')
}

threads.each(&:join)
puts "All good let's exit"

线程是一个有点复杂的主题,所以您可能需要研究一下。对于初学者,您可以参考类似于-https://www.rubyguides.com/2015/07/ruby-threads/的内容

相关问题