Javascript 如何为频繁的数据库更新编写Websockets/AJAX代码?还是有更好的方法?
我正在制作一个html&Javascript游戏,目前我正在尝试编写一些代码,在屏幕上显示玩家的黄金余额,并使其在每次玩家单击Javascript对象时减少1(该对象位于html页面的div中) 我将在页面加载时使用AJAX从数据库中获取平衡,然后将其放在Javascript 如何为频繁的数据库更新编写Websockets/AJAX代码?还是有更好的方法?,javascript,html,sql,ajax,websocket,Javascript,Html,Sql,Ajax,Websocket,我正在制作一个html&Javascript游戏,目前我正在尝试编写一些代码,在屏幕上显示玩家的黄金余额,并使其在每次玩家单击Javascript对象时减少1(该对象位于html页面的div中) 我将在页面加载时使用AJAX从数据库中获取平衡,然后将其放在中,但我不知道如何使这个数字在每次单击Javascript对象时减少1 我不希望数字降到0以下。相反,每当它达到0时,我想启动一个Javascript模式来通知玩家硬币已经用完了 ~~ 最初,我试图使用WebSocket在屏幕上显示玩家的余额,
中,但我不知道如何使这个数字在每次单击Javascript对象时减少1
我不希望数字降到0以下。相反,每当它达到0时,我想启动一个Javascript模式来通知玩家硬币已经用完了
~~
最初,我试图使用WebSocket在屏幕上显示玩家的余额,但我发现这非常令人困惑(我通常是编程新手),所以我现在尝试在页面加载上加载余额,然后使用AJAX每隔60秒将更新的余额量发布回我的数据库,或者每当用户关闭浏览器窗口、刷新页面或离开页面时。我不知道是否有可能做所有这些事情,或者从哪里开始,也许这是一种非常糟糕的方法,也许它不可扩展(也许数据库不支持使用这种方法不断更新1000名玩家)
我真的很感激任何人在这方面给我的建议或帮助
提前谢谢
我将在页面加载时使用AJAX从数据库中获取平衡,然后将其放在一个页面中,但我不知道如何使这个数字在每次单击Javascript对象时减少1
这里有两个div:您将硬币总数存储在一个div中,然后单击第二个div以丢失硬币
<div id="coins">10</div>
<div onCLick="javascript:loseCoin()">If you click here it will cost you 1 coin</div>
其中showModal()
将是您的模态(如果您不知道如何制作,请询问)
至于每60秒更新一次数据库,则需要一个计时器循环,例如:
setInterval(function () {
// get number of coins from your div's innerHTML
// then call your ajax controller to update DB
}, 60000);
使用javascript的ajax示例:
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == XMLHttpRequest.DONE ) {
if(xhr.status == 200){
console.log(xhr.responseText);
} else {
console.log('something else other than 200 was returned');
}
}
}
xhr.open("POST", "url_of_your_controller_here", true);
xhr.send("coins="+ coins_nr);
(可能数据库不支持从1000个
使用此方法的玩家)
任何像样的服务器每60秒处理1000个请求都不会有问题,但这可能取决于它有多少其他请求以及请求的复杂性
我将在页面加载时使用AJAX从数据库中获取平衡,然后将其放在一个页面中,但我不知道如何使这个数字在每次单击Javascript对象时减少1
这里有两个div:您将硬币总数存储在一个div中,然后单击第二个div以丢失硬币
<div id="coins">10</div>
<div onCLick="javascript:loseCoin()">If you click here it will cost you 1 coin</div>
其中showModal()
将是您的模态(如果您不知道如何制作,请询问)
至于每60秒更新一次数据库,则需要一个计时器循环,例如:
setInterval(function () {
// get number of coins from your div's innerHTML
// then call your ajax controller to update DB
}, 60000);
使用javascript的ajax示例:
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == XMLHttpRequest.DONE ) {
if(xhr.status == 200){
console.log(xhr.responseText);
} else {
console.log('something else other than 200 was returned');
}
}
}
xhr.open("POST", "url_of_your_controller_here", true);
xhr.send("coins="+ coins_nr);
(可能数据库不支持从1000个
使用此方法的玩家)
任何像样的服务器每60秒处理1000个请求都应该没有问题,但这可能取决于它有多少其他请求以及请求的复杂性。如果您只是试图在每次单击时减少窗口中的可见计数器,您可以执行以下操作: HTML:
20
代码:
//使用适合您的应用程序的任何单击处理程序
文档.添加的列表器(“单击”,函数(e){
var elem=document.getElementById(“coinsRemaining”);
//获取当前显示文本并转换为数字
var cnt=+elem.textContent;
--碳纳米管;
如果(cnt>=0){
elem.textContent=cnt;
}
如果(cnt如果您每次单击时都试图减少窗口中的可见计数器,则可以执行以下操作:
HTML:
20
代码:
//使用适合您的应用程序的任何单击处理程序
文档.添加的列表器(“单击”,函数(e){
var elem=document.getElementById(“coinsRemaining”);
//获取当前显示文本并转换为数字
var cnt=+elem.textContent;
--碳纳米管;
如果(cnt>=0){
elem.textContent=cnt;
}
if(cnt