我试图巩固我对blocking
对Web服务器的请求意味着什么的理解,以及何时将请求交给单独的工作人员(即sidekiq)是明智的。何时将工作从Web服务器切换到工作人员
请看下面的例子:
登录与Facebook
def sign_in response = Faraday.get("https://graph.facebook.com/me?fields=id,email&access_token=#{some_token}") user_info = JSON.parse(response.body) @user = User.find_by(uid: user_info["id"]) ... end
发送推送通知通过谷歌火力地堡
def send_push_notification ... fcm = FCM.new(FCM_KEY) registration_ids = [recipient_token] resp = fcm.send(registration_ids, data: {body: notification_params[:body]}) ... end
在这两个例子中,网络REQ对于第三方服务的使用是同步的并且可能是昂贵的。直觉上,我会尝试处理这些情况与单独的工作人员,因为他们块的主要应用程序。但是,我不是100%肯定什么阻止的意思。这是否意味着当有100个用户试图拨打sign_in
和每个Faraday.get
通话需要1秒时,所有用户都需要100秒才能登录?
要通过FCM发送通知,您可以使用后台进程。像sidekiq,delayed_job等。这是在应用程序内部集成通知模块的正确方法。 –
@DarpanChhatravala是啊!我很想听听这个问题的后半部分,它提出了“......我不能100%确定阻塞是什么意思,这是否意味着当有100个用户试图登录并且每个Faraday.get调用需要1其次,所有用户都需要100秒才能登录?“ –
我没有与我实现exp我一次读过这个博客,你可以尝试执行gem'faraday-request-timer'。从这你会得到总的请求时间。希望这将有助于完整:) –