【问题标题】:How to run a auction without settimeout and setinterval function in javascript??? [closed]如何在javascript中运行没有settimeout和setinterval函数的拍卖??? [关闭]
【发布时间】:2023-03-22 10:05:02
【问题描述】:

我需要一个建议来创建一个速度和性能更好的拍卖网站。基本上我通过使用 setinterval 和 settimeout 函数来运行倒计时来收集知识,并在此基础上进行开发(服务器上的速度非常慢,因为每秒都向服务器发送请求)

我真正需要的是一旦服务器收到请求 => 响应将需要更新给所有正在寻找拍卖的用户。

对此的任何建议都非常感谢。谢谢。

【问题讨论】:

  • 使用 ServerSideEvents 或 Websockets(以及长轮询作为后备)。

标签: php javascript node.js socket.io


【解决方案1】:

您可以创建一个拍卖标识符,并且客户端应该通过 AJAX 调用检查更改,每秒或您想要的频率。

喜欢

needsUpdate(auctionId);

作为回报,您要么得到 false ,要么得到更新的值

【讨论】:

  • 如何减少服务器的负载?
  • 这样,如果您的更新数据很大,您就省去了提供更新数据的所有麻烦。没有变化时,你所做的一切就像打乒乓球。
【解决方案2】:

在不详细了解您的要求的情况下,这是我过去解决该问题的方法。 首先:在服务器上运行脚本很重。如果您每秒都为每个客户这样做,并且您有很多客户,那么您将需要一个大数据中心。 ;-)

请改用纯文本文件。 让我们说类似“auction2343.txt”的内容,其中 2343 是一些对您有意义的拍卖 ID。

服务器不需要调用(昂贵的)进程来返回该文件的内容。

在服务器端,创建一些每秒运行的 cronjob 以在需要时更新文件。 或者,仅在有人出价时才更新它。 找出适合您的情况。

在文件中放入 Javascript 可以用来决定做什么的东西,例如最后的出价。

如果 Javascript 发现出价高于它的最后一个值,您可以执行其他操作,例如在服务器上启动一个真实(昂贵的)脚本,或者简单地显示客户端,或任何您需要的东西。

确保如果您使用 HXR(“ajax”),您会在文本文件(“auction2343.txt”)的 URL 中添加一些时间戳,这样您的客户端就不会获取缓存版本。

例如:

http://www.example.com/auction2343.txt?timestamp=[millis here]

【讨论】:

    【解决方案3】:

    设置不同类型的服务器。不要试图通过向普通 PHP 服务器发出大量请求来运行良好的拍卖网站。

    有几个更好的选择,其中之一包括 nodejs (http://nodejs.org/)

    否则,请尝试在您当前的应用程序中进行长轮询。但它会给服务器带来很大的压力。

    【讨论】:

      【解决方案4】:
      【解决方案5】:

      这里有类似的问题,有一个很好的答案:

      How do I implement basic "Long Polling"?

      但是,问题是 apache2 是一个阻塞的 Web 服务器,它需要您每隔一段时间轮询一次服务器以获得响应。

      如果您要使用像 node.js http://nodejs.org/ 这样的技术,它将允许您从服务器端推送到客户端,而无需刷新页面。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-11-22
        • 1970-01-01
        • 1970-01-01
        • 2013-06-21
        • 1970-01-01
        • 2020-11-15
        • 1970-01-01
        • 2020-06-29
        相关资源
        最近更新 更多