首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何为频繁的数据库更新编写Websockets/AJAX代码?还是有更好的方法?

如何为频繁的数据库更新编写Websockets/AJAX代码?还是有更好的方法?
EN

Stack Overflow用户
提问于 2015-05-02 18:25:26
回答 2查看 64关注 0票数 0

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

我将在页面加载时使用AJAX从数据库中获取余额,然后将其放在<div>中,但我不知道如何在每次单击Javascript对象时将这个数字减少1。

我不希望这个数字降到0以下。相反,无论何时达到0,我都想启动Javascript模式来通知玩家他们的硬币用完了。

~~

最初我试图使用websockets在屏幕上显示播放器的余额,但我发现它非常混乱(我一般都是编程初学者),所以我现在尝试在页面加载时加载余额,然后使用AJAX将更新后的余额每60秒发回我的数据库,或者每当用户关闭浏览器窗口、刷新页面或从页面导航时。我不知道是否有可能做所有这些事情,或者从哪里开始,也许这是一种非常糟糕的方法,也可能是不可扩展的(也许数据库不支持1000名玩家通过这种方法不断更新)?

我真的很感激任何人在这方面给我的任何建议或帮助。

提前感谢!

EN

Stack Overflow用户

回答已采纳

发布于 2015-05-02 18:54:56

我将在页面加载时使用AJAX从数据库中获取余额,然后将其放入一个但我不知道如何在每次单击Javascript对象时将这个数字减少1。

这里有两个div:您将硬币的总数存储在一个中,然后单击第二个以丢失硬币。

代码语言:javascript
运行
复制
<div id="coins">10</div>
<div onCLick="javascript:loseCoin()">If you click here it will cost you 1 coin</div>

使用一个函数来降低成本。

代码语言:javascript
运行
复制
function loseCoin(){
    var coins = getElementByid("coins");
    var coins_nr = parseInt(coins.innerHTML,10);
    if( coins_nr> 0 ){
        coins.innerHTML = coins_nr - 1;
    } else {
        showModal();
    }
}

showModal()将成为你的模式(如果你不知道怎么做的话)

至于每60秒更新一次数据库,您需要一个计时器循环,例如:

代码语言:javascript
运行
复制
setInterval(function () {
      // get number of coins from your div's innerHTML
      // then call your ajax controller to update DB
}, 60000);

使用javascript的ajax示例:

代码语言:javascript
运行
复制
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个请求应该没有问题,但这可能取决于它有多少其他请求以及请求的复杂性。

票数 2
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30005927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档