现在有个需求,物品价格是每秒自动下降10,一直降到0,这时所有用户看到的价格都在不停下降更新,试了在客户端设置每秒请求服务器一次,然后更新表中的价格-10,但发现这个好像读写数据库有点太频繁,不知道大家有啥好点的办法?
@liygheart 计算时间好像不行,比如原来这个物品价格100,每秒下降10,过了1秒,用户打开看到价格应该是90,用户2打开看到的也应该是90. 但在服务器端要怎么设置呢,,感觉客户端用个js计算下时间差就可以了,但,,数据库也要更新的,有个偷懒的方法,就是只在客户端计算,然后某个用户买了后,把这个价格直接丢给服务器去更新。。
@liygheart 不过这样存在一个问题,用户就可以直接在客户端修改价格了,比如起始价100,直接post一个10的价格给服务器,对,可以在提交后在服务器再计算一次,测试了下,始终有一点误差。不知道还有没有别的办法
@zouzhenxing 我也考虑在服务器计算,然后用socket.io广播,不过在服务器上计算每秒把价格更新一次,没想到啥好方法,不能像在客户端那样用settimeout,请问下能提供个思路不,谢谢
@nyrf 不用谢,注意,在改变价格的线程中不要做广播。具体为什么在朴灵的书中说得很清楚。setTimeout()必须用一个单独线程为执行,才有可能保证每秒运行一次,但不完全保证。除非你用一个独立核心来运行这个线程。
@zouzhenxing 暂时我的处理方式是,另开一线程,在线程中每秒更新价格,这个线程在只有这个物件在刚开卖时启动,启动后把物品status栏设置为sale,线程中价格每秒下降10,达到0后,商品下架。不过有个问题,如果中间有人购买了,这时这个线程还在跑,价格还是在下降。