当客户端在短时间内发送多个 POST 请求时,GoDaddy 服务器关闭连接

GoDaddy server closing connection when client sends multiple POST requests in a short interval of time

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

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

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

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

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

提前感谢您的帮助。

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

但一般来说,你需要使用去抖动技术。即使您的主机提供商允许那么多请求,让单个客户端发出那么多请求也不是一个好主意。

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

离子搜索示例:

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

使用 debounceTime 和 formControl 的示例:

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

  ngOnInit() {

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

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

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