Javascript 如何为频繁的数据库更新编写Websockets/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在屏幕上显示玩家的余额,

我正在制作一个html&Javascript游戏,目前我正在尝试编写一些代码,在屏幕上显示玩家的黄金余额,并使其在每次玩家单击Javascript对象时减少1(该对象位于html页面的div中)

我将在页面加载时使用AJAX从数据库中获取平衡,然后将其放在
中,但我不知道如何使这个数字在每次单击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