2016-05-10 1 views
0

Я разрабатываю приложение с аукционами в голландском стиле.Как сделать голландское ценовое снижение цены аукциона каждую секунду

На аукционе в голландском стиле цены постепенно снижаются, пока кто-то не примет заявку, и если никто не примет заявку до достижения установленного (низкого) порога, цена сбрасывается до ее первоначального значения снова и снова ,

Я не знаю, как передавать новые цены со стороны сервера.

например: цена продукта 1000, каждую секунду, она должна быть 10 и транслироваться всем пользователям. Я не могу найти хороший способ сделать это. Я пробовал:

price = 1000 
    while price > 0 
     price = price - 10 
     // broadcast to all users 
     sleep 1 
    end 
    end 

Но это не сработало.

+0

Ваша тема действительно вводит в заблуждение. То, что вы хотите решить, - это как получать уведомления в режиме реального времени с сервера клиентам (браузерам). Вы должны заглянуть в websockets. Это можно интегрировать в Ruby on Rails. – babgyy

+0

@babgyy Извините за мой слабый английский. например: цена продукта составляет 1000, каждая секунда, она должна быть ниже 10 и транслироваться для всех пользователей. Я не могу найти хороший способ сделать это. – dodo20120

+0

Не волнуйтесь, я просто сказал, что ваш вопрос может меня более конкретным в отношении ваших потребностей. Вам определенно нужно узнать о веб-сайтах. Википедия поможет. В базовом веб-приложении (с использованием протокола HTTP) клиент (ваш браузер) запрашивает сервер один раз, чтобы получить содержимое страницы, отображает страницу пользователю и затем ждет действия пользователя. Сервер не мог «транслировать» каждого клиента. Вот почему вам нужен еще один протокол, позволяющий вашему клиенту «подписаться» на сообщения с сервера: websocket - один из таких протоколов. https://en.wikipedia.org/wiki/Push_technology – babgyy

ответ

0

Вы можете посмотреть eventmachineperiodic timer и попробовать что-то вроде этого.

price = 1000 
timer = EventMachine::PeriodicTimer.new(1) do 

    #broadcast the current price with action cable to users here 
    #send_message 
    price -= 10 
    if (price) < 10 
    price = 1000 
    end 
end 

Заменить #send_message комментарий по фактической трансляции с кабелем действия.

+0

Я протестировал это, но когда пользователь открывает браузер, это будет работать один раз, если 10 пользователей, это будет работать 10 раз. – dodo20120

+0

Где вы его выразили? Он не должен быть в методе контроллера, который вызовут все пользователи. Либо в методе контроллера, который будет вызываться только администратором при запуске аукциона, либо в фоновом задании, которое будет срабатывать при определенных условиях. – babgyy

+0

Я хочу сделать это автоматически, когда начнется аукцион, я не могу найти способ сделать это в sidekiq. – dodo20120

Смежные вопросы