降价拍每秒更新价格是在服务器端还是客户端更新

ningyue0913 2016-05-10 11:20:12
要做一个降价拍的东西,就像https://youzan.com/products/countdown, 不过我发现很多降价拍对价格每秒或者每分下降更新是在客户端处理的,这样有个问题,就是用户有可能直接提交一个价格到服务器了。不知道有没有办法在服务器每秒更新价格,然后广播给用户?有没有做过类似的高手给个参考?谢谢。
...全文
292 34 打赏 收藏 转发到动态 举报
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
ningyue0913 2016-05-13
  • 打赏
  • 举报
回复
引用 32 楼 xuzuning 的回复:
所以说,你根本就没有理解 websocket 是怎么工作的 比如,开始有用户访问 ws://www.a.com/products/1,服务器就启动一个服务进程 先完成该项服务的初始化工作,应答该用户后 就开始等待这个用户的下一次请求,并等待其他用户的到来和请求 直到管理员发出停止服务的指令(或系统崩溃)才结束 在这个过程中,程序并没有结束,所以你的拍卖价就那么一个(递增、递减都一样)。不可能出现延迟或混乱 再重申一下: http 是不可重入的,每个请求用各自进程处理,由于进程是独立的,所以有不同步现象 websocket 是可重入的,所有的请求都用同一的进程处理,所以不存在同步问题(除非用户自己掉线了而没发现)
好的,谢谢,我再试下。
傲雪星枫 2016-05-12
  • 打赏
  • 举报
回复
while(1){ 更新价格操作 sleep(1); }
智商众筹 2016-05-12
  • 打赏
  • 举报
回复
引用 18 楼 ningyue0913 的回复:
[quote=引用 15 楼 wander_wind 的回复:] 服务器上借助操作系统的计划任务来实现 也可以在数据库保存原始价格和活动开启时间,写一个函数自动计算当前秒数的价格,用计算后的结果作为实时价格 后台可不必做定时器保证随时更新数据,有请求过来时根据原始价格当场计算即可
这个我想过,就是在客户端每秒计算更新价格,然后用户提交后,在服务器端用时间差计算价格,不过有点误差。但也是最简单的办法了,计划任务感觉用了后就比较坑[/quote] 感觉仅仅给用户显示的价格,没有必要消耗那么大的开发成本和服务器资源
ningyue0913 2016-05-12
  • 打赏
  • 举报
回复
引用 20 楼 fdipzone 的回复:
socket不是每秒更新的,而是持久通讯。
这个我知道,我现在需要服务器那边每秒更新一次价格,然后通过websocket广播给客户端,现在主要堵在不知道怎么让服务器那边每秒更新一下价格
傲雪星枫 2016-05-12
  • 打赏
  • 举报
回复
socket不是每秒更新的,而是持久通讯。
傲雪星枫 2016-05-12
  • 打赏
  • 举报
回复
socket不是每秒更新的,而是持久通讯。 与http请求是不同的,http请求是一次完成结束,socket是持久同步。
mengfk000 2016-05-12
  • 打赏
  • 举报
回复
xuzuning 2016-05-12
  • 打赏
  • 举报
回复
访问 http 服务是 http://youahost/page.php 访问 websocket 服务是 ws://youahost/page.php 根本就不是一回事
xuzuning 2016-05-12
  • 打赏
  • 举报
回复
我都说了,你用的还是 http 服务,不是 websocket 服务 php 本身是不支持 websocket 的,需要自己写 websocket 服务器
ningyue0913 2016-05-12
  • 打赏
  • 举报
回复
引用 23 楼 xuzuning 的回复:
在你的 websocket 服务器中启动计时器不就行了?
我试过,但每个用户一连接就开始循环了,看来是我把姿势用错了。我再看下。谢谢
xuzuning 2016-05-12
  • 打赏
  • 举报
回复
在你的 websocket 服务器中启动计时器不就行了?
xuzuning 2016-05-12
  • 打赏
  • 举报
回复
所以说,你根本就没有理解 websocket 是怎么工作的 比如,开始有用户访问 ws://www.a.com/products/1,服务器就启动一个服务进程 先完成该项服务的初始化工作,应答该用户后 就开始等待这个用户的下一次请求,并等待其他用户的到来和请求 直到管理员发出停止服务的指令(或系统崩溃)才结束 在这个过程中,程序并没有结束,所以你的拍卖价就那么一个(递增、递减都一样)。不可能出现延迟或混乱 再重申一下: http 是不可重入的,每个请求用各自进程处理,由于进程是独立的,所以有不同步现象 websocket 是可重入的,所有的请求都用同一的进程处理,所以不存在同步问题(除非用户自己掉线了而没发现)
ningyue0913 2016-05-12
  • 打赏
  • 举报
回复
引用 26 楼 xuzuning 的回复:
访问 http 服务是 http://youahost/page.php 访问 websocket 服务是 ws://youahost/page.php 根本就不是一回事
不好意思,是我没表达清楚,这些我都知道,我现在的问题是,一个用户打开这个商品页面后,socket这时就是connected,比如socket的地址是ws://www.a.com/products/1,访问的是http://www.a.com/products/1 这个页面,然后用户访问这个页面,websocket这时就connected上了,比如这个商品拍卖应该是10点整开始,这时服务器应该在自动每秒下降价格了,而第一个用户A是10点01分访问商品页面,这时价格其实已经下降了600(按每秒下降10,原价1000),那他看到的价格应该是400,然后服务器还在不停更新,并把新的价格广播给用户A. 用户b10点01分01秒打开页面,那他也一样的流程,只是价格看到的是390.。。然后服务器也是不停更新,广播。现在我是把自动降价的逻辑写在ws://www.a.com/products/1 action里,大体意思就是这个action里从初始价格,每隔一秒就更新一次价格,然后广播,有个问题是,用户A连接时,这个actiion执行一次,用户b连接又执行了一次,
ningyue0913 2016-05-12
  • 打赏
  • 举报
回复
引用 28 楼 wander_wind 的回复:
[quote=引用 18 楼 ningyue0913 的回复:] [quote=引用 15 楼 wander_wind 的回复:] 服务器上借助操作系统的计划任务来实现 也可以在数据库保存原始价格和活动开启时间,写一个函数自动计算当前秒数的价格,用计算后的结果作为实时价格 后台可不必做定时器保证随时更新数据,有请求过来时根据原始价格当场计算即可
这个我想过,就是在客户端每秒计算更新价格,然后用户提交后,在服务器端用时间差计算价格,不过有点误差。但也是最简单的办法了,计划任务感觉用了后就比较坑[/quote] 感觉仅仅给用户显示的价格,没有必要消耗那么大的开发成本和服务器资源[/quote] 其实我本来想在客户端直接settimeout来处理,不过同时打开几个浏览器看了下,有那么一两秒的误差,比如a这打开看到是1000,b这就是990,找了下好像都说有这个问题。
「已注销」 2016-05-12
  • 打赏
  • 举报
回复
websocket可以使用长连接,你判断有用户进来(逻辑方面要自己写),然后注册alarm信号就行,PCNTL这个要懂 node下有socket.io,PHP也有很多,直接用现成的吧
智商众筹 2016-05-11
  • 打赏
  • 举报
回复
用户观看页面时,给他一个当前价格,和js降价公式,只要不是恶意顾客或者极端情况,是可以保证前后数据统一的,反正你下单时做好安全检测就OK
智商众筹 2016-05-11
  • 打赏
  • 举报
回复
兄弟,简单粗暴解决啊,你这个价格随时间变化的公式是固定的吧?那就在前后端一起设定时器降价,中间也别搞什么长连接短轮询了,就让他看前端的价格,提交订单或者进行相关操作时再同步核对一下服务端的价格
ningyue0913 2016-05-11
  • 打赏
  • 举报
回复
引用 17 楼 yao970953039 的回复:
好处就是你可以无限扩展你的gateway,请求多了就横向扩展 crontab这个不靠谱,别用
我比较倾向用socket,不过用socket,不知道怎么让每秒更新,感觉要做这种每秒更新的,不用cronjob还真没啥好办法
ningyue0913 2016-05-11
  • 打赏
  • 举报
回复
引用 15 楼 wander_wind 的回复:
服务器上借助操作系统的计划任务来实现 也可以在数据库保存原始价格和活动开启时间,写一个函数自动计算当前秒数的价格,用计算后的结果作为实时价格 后台可不必做定时器保证随时更新数据,有请求过来时根据原始价格当场计算即可
这个我想过,就是在客户端每秒计算更新价格,然后用户提交后,在服务器端用时间差计算价格,不过有点误差。但也是最简单的办法了,计划任务感觉用了后就比较坑
「已注销」 2016-05-11
  • 打赏
  • 举报
回复
好处就是你可以无限扩展你的gateway,请求多了就横向扩展 crontab这个不靠谱,别用
加载更多回复(14)

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧