【问题标题】:GoDaddy server closing connection when client sends multiple POST requests in a short interval of time当客户端在短时间内发送多个 POST 请求时,GoDaddy 服务器关闭连接
【发布时间】:2020-11-16 15:27:02
【问题描述】:

我正在使用 Ionic Framework (Angular v9) 将 POST 请求发送到托管在 GoDaddy 服务器上的 PHP 文件。 POST 请求工作正常,直到客户端间歇性地发送它们。但是,当客户端开始向服务器发送多个 POST 请求时,请求将被拒绝。服务器响应以下错误之一:

  1. 错误连接已关闭
  2. 错误连接超时
  3. err_connection_reset

发现此类错误的场景 - 自动完成实现。我有一个产品表 (phpmyadmin - MySQL DB) 和一个 PHP 文件,用于从该表中检索数据。客户端应用程序上有一个文本框。用户开始输入产品名称。该应用程序从文本框中获取值并向服务器发送 POST 请求。服务器从 POST 请求中提取值并在表中查询与输入字符串匹配的值。前 5 个这样的结果被发送回客户端。

只要客户端缓慢地触发 POST 请求,即 2 个请求之间经过足够的时间间隔(几秒钟),此流程就可以工作。然而,这种理想的情况是不切实际的。用户的打字速度不允许经过这样的间隔。我想查询数据库并让服务器在每个 keydown 事件上返回结果。

但问题是,当同一个客户端向服务器发送太多 POST 请求而没有在任何 2 个请求之间留出足够的时间间隔时,服务器正在关闭连接/重置连接。

提前感谢您的帮助。

【问题讨论】:

  • 可能只是 GoDaddy 应用的限制,我会先问他们。
  • 如果服务器设置为关闭或拒绝在太短的时间间隔内发生的连接,则很难解决此问题(尤其是在您的服务器设置有限或没有可用服务器设置的托管服务器上)。最好的解决方案是降低用户体验并实现一个睡眠定时器来限制每秒发出的请求数量(是的,如果您在每个 keydown 事件上查询数据库,那么您每秒发出多个请求)。
  • 我同意@Fullslack.dev 的观点,如果您没有服务器的设置控制,也许只是放慢一点来自客户端的帖子将是一个很好的中间解决方案。因此,我建议使用按钮提交结果,而不是自动完成或重新定义自动完成,以便您可以在睡眠后从没有键盘输入的情况下发送数据

标签: php mysql angular ionic-framework godaddy-api


【解决方案1】:

如果可以的话,您需要了解实际限制(允许从客户端到服务器的 POST 请求速率),然后解决这个问题。

但一般来说,您需要采用去抖动技术。即使您的主机提供商允许如此多的请求,让该数量来自单个客户端也不是一个好主意。

  1. 您可以对ion-searchbar 等组件使用内置去抖动功能
  2. 您可以使用debounceTime RXJS 运算符来管道您的 POST 请求(这样它就不会更频繁地触发)
  3. 您可以在客户端评估此类自动完成详细信息的缓存,以防止频繁请求

离子搜索示例:

<ion-searchbar debounce="500"></ion-searchbar>

debounceTime 和 formControl 示例:

  constructor() {
    this.searchControl = new FormControl();
  }

  ngOnInit() {

    this.searchControl.valueChanges
      .pipe(debounceTime(700))
      .subscribe(search => {
        
      });
  }

【讨论】:

    【解决方案2】:

    大多数答案都建议我在深入研究此问题之前联系 GoDaddy。因此,在联系 GoDaddy 后,我发现 SHARED 服务器对于数据密集型应用程序不是很好。如果客户端在短时间内向服务器发出过多请求,升级到 PRIVATE VPS 服务器符合我们的最大利益。简单地增强共享服务器并不一定会提高应用程序的性能或解除任何施加的限制。

    我从一位高级开发人员那里收到的另一个建议是优化数据库。应该执行规范化、索引、应用适当的约束和表之间的关系等。如果数据库未优化,某些服务器可能会关闭连接并且 POST 请求可能会失败。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-24
      • 2021-12-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多