• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

php 高并发竞拍

php 搞代码 4年前 (2022-01-24) 14次浏览 已收录 0个评论

php 高并发竞拍求助

本帖最后由 dr21c 于 2015-09-14 15:59:09 编辑

先说环境:
windows 2003 iis+php+mysql
阿里云 4核4G 5M 的云服务器;

当前问题:(已多次测试,可以排除操作因素)
a,竞拍出价过快,页面卡住(只有五个人的情况下)
b,$GLOBALS[‘user_info’]数据丢失,一刷新页面,用户已不在登录状态,程序管理后台也退出了。

本想做到300人同时在线竞拍,现在5个人都搞不定,
自已研究出来的,业务逻辑代码写得很差,求版主和各位大神指点一下,

程序实现方式:
一,会员登录,验证成功以后,生成的是$GLOBALS[‘user_info’],验证会员是否在线状态,使用的是这个变量而不是session
二,竞拍实现方式,
1, 先查询 数据库报名记录,未报名9来源gaodai#ma#com搞@代~码$网搞gaodaima代码不允许参加竞拍:$had_sign = $GLOBALS[‘db’]->getOne(“select id from “.DB_PREFIX.”sign where deal_id= ” . $dat[‘id’] . ” and user_id = ” . $udata[‘id’]);

2, 再查询 这个竞拍项目的当前价(竞拍出价表),如果(竞拍出价表)当前价不存在,则去取值(竞拍项目表)的起拍价,通过这一步得出,竞拍项目的当前价。

3,判断用户出价,是否比当前价高,否则不予通过。

4,以上条件满足,插入(竞拍出价表)最新价格数据。

5,ajax_return($data); ajax返回最新数据。

【中间我做了一些限制】
// 用写入库的方式,限制提交频率
$c_time = $GLOBALS[‘db’]->getOne(“select create_time from “.DB_PREFIX.”estate_biding_lock where deal_id= ” . $dat[‘deal_id’] . ” and user_id = ” . $dat[‘user_id’] . ” order by id desc limit 1″);
if($c_time){
if( (time() – $c_time) < 5){ //限制5秒 2015-09-06 10:59:33
….. 以写进数据库的方式,时间间隔 限制提交频率。

// 用生成文件的方式,限制提交频率
$lockfile = “lock.txt”;
if(file_exists($lockfile)){
$data[‘state’] = 0;
$data[‘info’] = “竞拍激烈,请稍侯出价…“;
ajax_return($data);
exit;
}else{
// 生成锁定文件
$myfile = fopen($lockfile, “w”);
$txt = “lock”;
fwrite($myfile, $txt);
fclose($myfile);
}

竞拍出价成功后,后面做了删除。

竞拍页面:
A,竞拍开始后,setTimeout(“get_auction_list()”, 1000); 每秒钟都在 $.post 查询数据库,获得最新的出价列表和最新价,显示在页面上,即ajax实时更新,

// 得到最新的出价列表
1,查询数据库的此项目的最新出价数据,并对数据进行了处理和判断。
2,再次查询数据库最新的一条出价记录,获得最新的价格。
3,查询这个项目的起拍价和每次加价幅度(固定),返回新的最低出价。(这一步刚刚想到解决掉不查询了)
4,ajax返回数据。

——解决思路———————-
1. 代码存在sql注入
2. 用户信息存储global不靠谱,为何不用session
3. 用文件的方式实现锁,太奇葩了,如果程序出问题了,锁可能永远都解不开了
——解决思路———————-
$GLOBALS 只在当前页中有效,不能作为 验证会员是否在线状态

用户已在登录状态时,不需要再查报名表,而是在登录时就先设置好转态
直接 replace 竞拍价,当然要加上报价>竞拍价 的条件
select 出 竞拍价 返回给用户

ajax 长轮询实时性不好,应考虑 websock


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:php 高并发竞拍

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址