231*_*654 4 javascript php ajax jquery page-refresh
我正在尝试构建一个主要使用PHP的浏览器卡片游戏,也许还有一些其他有用的语言可以用我一直想做的东西来测试和扩展我的PHP知识.但是我读过并试图实现的每个在线解决方案都行不通,我不知道为什么.我有这样的逻辑:
//find game form
print "<form method='post' action='game.php'>
<label>Enter host generated game #</label><br>
<label><input type='text' name='gamenumber'></label><br>
<label><input type='submit' name='findgame' value='FindGame'></label><br><br>
</form>";
//host game button
print "<form method='post' action='game.php'>
<label><input type='submit' name='hostgame' value='HostGame'></label>
</form>";
//game logic
if(isset($_POST['hostgame']))
{
$roomnumber = rand();
print $roomnumber;
insertField($Ausername,$roomnumber); //insert field GUI
//link game to host for future field printing
$query = "UPDATE game".$roomnumber." SET host='".$Ausername."' WHERE host='null'";
$result = mysqli_query($link, $query);
print "<div id='quote'>"; //populate host just disappears <meta http-equiv='refresh' content='5' />
//populates self and opponents in hosts perspsective
populatehost($roomnumber);
print "</div>";
}
if(isset($_POST['findgame'])) //this processes after user submits data.
{
$roomnumber = $_POST['gamenumber'];
$_SESSION['gamenumber'] = $_POST['gamenumber'];
//link game to find for future field printing
$query = "UPDATE game".$roomnumber." SET find='".$Ausername."'WHERE find='null'";
$result = mysqli_query($link, $query);
print "<form method='post' action='game.php'>
<label><input type='submit' name='startgame' value='StartGame'></label>
</form>";
//populates self and opponents in finds perspsective
populatefind($roomnumber);
}
if(isset($_POST['startgame'])) //this processes after user submits data.
{
print "<br>Game started.<br>";
print "heads or tails?\n\n";
print "<form method='post' action='game.php'>
<label><input type='text' name='headstails'></label><br>
<label><input type='submit' name='select' value='Select'></label><br><br>
</form>";
//finder always starts game
populatefind($_SESSION['gamenumber']);
}
$gameStatus="";
$flip = rand(1,2);
$coin = "heads";
$gameStarted = "game not started";
if($flip==1)
$coin="heads";
else if($flip==2)
$coin="tails";
if(isset($_POST['headstails'])) //this processes after user submits data.
{
if($_POST['headstails']==$coin)
{
print "find game player goes first";
$gameStarted = "game started";
//notify find game player he goes first
//do logic where he goes first
}
else
{
print "host game player goes first";
$gameStarted = "game started";
//notify host game player he goes first
//do logic where he goes first
}
populatefind($_SESSION['gamenumber']);
}
Run Code Online (Sandbox Code Playgroud)
这是我试过的jquery函数,我粘贴在页面底部.
?>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js%22%3E%3C/script%3E">
jQuery(function () {
var $els = $('div[id^=quote]'),
i = 0,
len = $els.length;
$els.slice(1).hide();
setInterval(function () {
$els.eq(i).fadeOut(function () {
i = (i + 1) % len
$els.eq(i).fadeIn();
})
}, 2500)
})
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
因此,我能够为主持人和发现者打印字段,一旦取景器翻转硬币,就会说出谁先从他们的角度出发......但是我很难让它出现在另一个玩家的角度.我正在考虑通过使用执行所有打印的功能刷新div来实现它,但无论如何都似乎没有任何效果.我尝试了很多不同的PHP睡眠方法,我尝试了一些jquery函数,没有任何效果.并且btw填充主机和填充查找只是基于变量数组的巨型表的函数.
您尝试实现的这类事情将使用常规Ajax调用来消耗服务器的大量资源.
类似问题:链接
我们以两个用户之间的聊天为例:
用户的1页有一个Javascript计时器,询问每一秒的新消息:"嘿服务器,给我发新消息." 无论是否有新消息,服务器都会处理请求,搜索新消息以回复"我现在没有消息给您"或"这是您的新消息".对于用户2也是如此.
如果两个用户都保持聊天页面打开10秒钟,您的服务器将收到20个新消息请求,将搜索20个新消息,并将发送20个回复,其中包含新消息或"无新消息"回复.即使两个用户都没有发送任何内容,只需保持页面打开即可.想象一下,如果有1000个用户连接到您的聊天室!
在这种情况下,最好的方法是Socket.在同一个聊天示例中,用户1和用户2将继续收听新消息,而不是每秒都要求他们.当用户1发送消息时,服务器将通知用户2"我有一条新消息.这是."
如果连接了1000个用户,则完全没有问题.服务器将新消息发送到套接字通道,并且将通知所有连接的用户.没有延迟.
在您的具体情况下,将这样工作:播放器1和播放器2正在侦听新消息.当玩家1点击卡片时,将触发服务器命令.服务器将接收并发送套接字通道的消息:"嘿,所有正在等待新卡的人,这里是",然后每个玩家都会收到通知.即刻.
使用Javascript计时器的第一个场景的另一个问题是:如果增加计时器间隔,则回复将延迟传递.
套接字的另一个好处是:它独立于技术.PHP,Java,Node等
使用WebSocket和Php:Link的 GitHub项目
这是一个存储库,其中包含我在之前尝试过Socket时运行的一些测试