实时拍卖系统

gumwzg 2010-07-19 10:20:14
要用php+mysql做一个实时拍卖系统,以前没接触过。

关于即时竞价刷新,当访问量大的时候怎么解决。
(例如在30秒的倒计时时间中,有大量用户竞拍)

给出思路和技术的都给分
...全文
582 点赞 收藏 28
写回复
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
k1060220963 2010-08-05
都是高手啊。路过
回复
Dleno 2010-07-23
[Quote=引用 11 楼 foolbirdflyfirst 的回复:]

考虑下flash做socket client,socket server(不推荐php做,java/c/c++都行)不断推送给socket client,基于tcp,一次连接,不停更新。http的话,一来一回的,用户量增大的话,不敢想象。
[/Quote]

+++

就压力和时时显示来说,还是这个好点
回复
BooJS 2010-07-23
做下压力测试吧,说什么都没用。http想完成实时任务,感觉不靠谱。
回复
gumwzg 2010-07-23
顶一下
回复
dahaidao 2010-07-23
竞拍好像不是这样的吧,是每个有效叫价,重新计时的。
回复
床上等您 2010-07-20
[Quote=引用 10 楼 gumwzg 的回复:]

5 楼能说说 他是怎么做的么?
思路就行
[/Quote]
具体细节还没看,大概的看了下。
js每秒 ajax 向 server 发请求,写数据库时,使用 事务 来处理用户的拍卖。感觉是这样做,少用户还可以,但多用户,恐怕很难承受,不过我这里的服务器是自己的。
回复
gumwzg 2010-07-20

读的时候是每秒刷新一次 用ajax 发送get请求 读xml文档

写的时候比读的少
更新数据库和xml文档

可行否?

回复
海泪知己 2010-07-20
你看看这个吧,或许能帮到你www.sooowo.com
回复
fxs_2008 2010-07-20


关于即时竞价刷新,当访问量大的时候怎么解决。
(例如在30秒的倒计时时间中,有大量用户竞拍)
------------------

难点可能高并发数据库读写

抗并发webserver首选nginx。----这个可能是个办法,或者其他负载均可,apache内存高的话也行,主要是提高php的并发能力。

数据库上能否尝试读写分离(如果更新memcache快的话也可考虑那个)。

一是写的速度:如何才能更快和并发;二是读的速度(因为你前面要不断刷,而且不能缓存,当然你也可能缓存在2-3秒)


回复
gumwzg 2010-07-20
每次竞拍时候
把要竞拍的货品及数量存储在xml中

当用户竞价的时候 用 socket 和 xml 通讯

这样能应付 货品数量大和用户访问量大的问题么?
回复
chinajoy2012 2010-07-20
帮顶一下···
回复
gumwzg 2010-07-20
顶一下
回复
kyzy_yy_pm 2010-07-20
不知道楼主认为sleep睡眠好还是一直不停的刷数据库
回复
kyzy_yy_pm 2010-07-20
[Quote=引用 9 楼 gumwzg 的回复:]
3 楼的代码 如果是几百种商品,
访问量大的话 能行么


前台用ajax 局部刷新, 后台用多线程处理,这个想法可行么?
[/Quote]
php并发这块支持本来就不怎么好,我认为php的comet做法已经很适合了
回复
myhope88 2010-07-19
定时刷新吧,不太懂,帮顶下
回复
kyzy_yy_pm 2010-07-19
每次有人竞标都要返回
回复
gumwzg 2010-07-19
例如在30秒的倒计时时间中,有大量用户竞拍
是每次有人竞标 都做一次数据库操作 还是怎么处理
回复
床上等您 2010-07-19
我现在着手的项目就有一个拍卖功能。

不过这个功能是前人所做的。
回复
amani11 2010-07-19
问题是,你现在的压力在哪里呢?

除了必须实时的数据,其余的缓存

如果是ajax请求的,需要显示剩余商品数量,也可以缓存,几秒更新一次,
回复
kyzy_yy_pm 2010-07-19
希望你能够明白


//a.html

<textarea id="msg" rows="5" cols="30"></textarea>
<input type="button" value="发送" onclick="send()"><span id="sendmsg"></span>

<script src="../jquery.js"></script>
<script>
function send(){
var msg = document.getElementById("msg").value;
if(!msg)document.getElementById("sendmsg").innerHTML = "消息不能为空";
document.getElementById("sendmsg").innerHTML = "正在发送...";
$.post("server.php", {"msg": msg, "rand": Math.random()}, function(data){
if(data == "1"){
document.getElementById("sendmsg").innerHTML = "发送成功!";
}else{
document.getElementById("sendmsg").innerHTML = "发送失败!";
}
});
}
</script>


//b.html
<div id="div"></div>

<script src="../jquery.js"></script>
<script>
function text_replace(text){
var l = text.length;
for (var i = 0; i < l; i++) {
if (text.charAt(i) == "%"){
if(text.charAt(i+1) == "2"){
if(text.charAt(i+2) == "3"){
text = text.replace("%23","#");
}
if(text.charAt(i+2) == "4"){
text = text.replace("%24","$");
}
if(text.charAt(i+2) == "6"){
text = text.replace("%26","&&");
}
if(text.charAt(i+2) == "B"){
text = text.replace("%2B","+");
}
if(text.charAt(i+2) == "C"){
text = text.replace("%2C",",");
}
if(text.charAt(i+2) == "F"){
text = text.replace("%2F","/");
}
}
if(text.charAt(i+1) == "3"){
if(text.charAt(i+2) == "F"){
text = text.replace("%3F","?");
}
if(text.charAt(i+2) == "B"){
text = text.replace("%3B",";");
}
if(text.charAt(i+2) == "D"){
text = text.replace("%3D","=");
}
if(text.charAt(i+2) == "A"){
text = text.replace("%3A",":");
}
}
if(text.charAt(i+1) == "4"){
if(text.charAt(i+2) == "0"){
text = text.replace("%40","@");
}
}
}
}
return text;
}

var filemtime = 0;
function test(){
$.post("server.php", {"filemtime": filemtime, "rand": Math.random()}, function(data){
if(data){
data = eval("(" + data + ")");
filemtime = data["filemtime"];
document.getElementById("div").innerHTML = text_replace(decodeURI(data["msg"]));
setTimeout("test()", 1000);
}else{
alert("error");
}
});
}

test();
</script>

//server.php
<?php
function DBConnect(){
mysql_connect('192.168.1.2', 'chushandb', 'chushandb');
mysql_select_db('chushandb');
mysql_query('set names gbk');
}

if(isset($_POST['msg'])){
$msg = iconv('utf-8', 'gbk', htmlspecialchars($_POST['msg']));
DBConnect();
mysql_query('insert into test(msg) values("'.$msg.'")');
if(mysql_insert_id()){
$fp = fopen('msgfile.txt', 'a');
fputs($fp, $msg, 1);
echo '1';
exit;
}
echo '2';
exit;
}

$filemtime = isset($_POST['filemtime']) && $_POST['filemtime']? $_POST['filemtime']: filemtime('msgfile.txt');

while(1){
if($filemtime == filemtime('msgfile.txt')){
sleep(1);
clearstatcache();
}else{
DBConnect();
$rs = mysql_query('select msg from test order by id desc limit 0, 1');
if($row = mysql_fetch_assoc($rs)){
$msg = rawurlencode(iconv('gbk', 'utf-8', $row['msg']));
}
echo json_encode(array('filemtime' => filemtime('msgfile.txt'), 'msg' => $msg));
exit;
}
}

?>
回复
发动态
发帖子
基础编程
创建于2007-09-28

2.1w+

社区成员

从PHP安装配置,PHP入门,PHP基础到PHP应用
申请成为版主
社区公告
暂无公告