【问题标题】:How to make Dutch auction system price decrement every second如何让荷兰式拍卖系统价格每秒递减
【发布时间】:2016-05-10 06:25:46
【问题描述】:

我正在开发一个带有荷兰式拍卖的应用程序。

在荷兰式拍卖中,价格会逐渐下降,直到有人接受出价,如果在达到预设(低)阈值之前没有人接受出价,价格会一遍又一遍地重置为其初始高值。

我不知道如何从服务器端广播新价格。

eg: 产品的价格是1000,每秒应该下降10,并广播给所有用户。我找不到这样做的好方法。我试过这个:

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

但它不起作用。

【问题讨论】:

  • 您的主题确实具有误导性。您要解决的是如何从服务器到客户端(浏览器)的实时通知。你应该看看websockets。可以将其集成到 Ruby on Rails 中。
  • @babgyy 对不起,我的英语很差。 eg: 产品的价格是1000,每秒降10,广播给所有用户。我找不到这样做的好方法。
  • 不用担心,我只是说您的问题可以让我更具体地了解您的需求。你肯定需要了解 websockets。维基百科将提供帮助。在基本的 Web 应用程序(使用 HTTP 协议)中,客户端(您的浏览器)向服务器请求一次以获取页面内容,将页面显示给用户,然后等待用户操作。服务器无法向每个客户端“广播”。这就是为什么您需要另一个协议来使您的客户端能够“订阅”来自服务器的消息:websocket 就是这样一个协议。 en.wikipedia.org/wiki/Push_technology
  • 是的,我用过 rails 5 和 action cable,但我不知道如何让价格从 1000 每秒下降 10 到 0。

标签: javascript ruby-on-rails ruby


【解决方案1】:

您可以查看eventmachine periodic 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评论替换为实际播出的动作线。

【讨论】:

  • 我测试了这个,但是当用户打开浏览器时,它会运行一次,如果有10个用户,它将运行10次。
  • 你把它放在哪里了?它不应该在所有用户都会调用的控制器方法中。在开始拍卖时只有管理员才会调用的控制器方法中,或者在某些情况下将触发的后台作业中。
  • 我想让它在拍卖时间开始时自动启动,我在sidekiq中找不到方法。
  • 你卡在哪里了?你能展示你到目前为止所做的事情吗?
  • 我还没有一个好的方法来做到这一点,仍然不知道每秒降价。似乎应该使用后台作业。
猜你喜欢
  • 2016-07-02
  • 1970-01-01
  • 1970-01-01
  • 2014-11-27
  • 1970-01-01
  • 2013-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多