【问题标题】:Error: Socket Hang Up with Postman API testing错误:使用 Postman API 测试的套接字挂断
【发布时间】:2022-03-06 03:47:50
【问题描述】:

我们已经部署了一些 API(很少使用 Node.js/Express.js 开发,还有一些使用 Python Quart)。我们所有的 API 都是使用 Azure 容器化实例部署的。我们通过 Postman 设置了定期 API 监控。 API 在大约 20% 的时间里失败并出现错误:套接字挂起。我们在开发区域或通过浏览器访问 API 时从未遇到过这个问题。什么可能导致此 Socket Hang Up 问题,我们如何克服它?

我们的 Node.js API Dockerfile 设置如下:

FROM node:16

WORKDIR /app

COPY package*.json ./
RUN npm install
COPY . .
RUN rm -rf .env
RUN mv production.env .env

#ENV PORT=5000
EXPOSE 5000

CMD ["npm", "run", "prod"]

Python Quart APIs Dockerfile 设置如下:

FROM continuumio/miniconda3

COPY . /api/

WORKDIR /api/src

RUN conda env create -f /api/environment.yml
COPY entrypoint.sh ./
RUN chmod +x ./entrypoint.sh

ENTRYPOINT ["./entrypoint.sh"]

EXPOSE 5000

入口点.sh

#!/bin/bash --login
set +euo pipefail
conda activate python_env_name
set -euo pipefail

exec hypercorn --bind 0.0.0.0:5000 QuartAPI:app

【问题讨论】:

  • node 和 python api 都失败了?同时?你是怎么监控的?通过访问 api/healthcheck 路径?还是套接字调用?

标签: node.js azure postman azure-container-instances quart


【解决方案1】:

Postman 中的问题似乎比 API 中的问题更大。假设服务器没有抛出/记录任何错误,很可能 Postman 没有正确处理响应。以下是 Postman 中可能导致此问题的一些内容:

  1. 在请求中:添加标头“内容长度”。它应该自动计算该值(但您可以尝试指定它)。如果您指定了一个值,请确保它是正确的。
  2. 在 Postman -> 设置 -> 常规中,确保“超时”值足够高或永远为“0”。
  3. 根据我的经验,Postman 不喜欢 VPN。如果问题发生时您已连接到 VPN,请断开连接并重试。如果这样可以解决问题,您需要在 VPN 周围创建一条特殊路由。
  4. Postman -> Settings -> General,尝试禁用“Send Postman Token”
  5. 最后一件事:Postman 很多人没有处理由服务器发起的 TLS 重新协商,这在 Postman 的多个版本中会导致连接/套接字错误。该问题似乎影响了 7.1 - 7.5 左右的 Postman 版本。您可以尝试将 Postman 更新到最新版本,这可能是解决办法。

【讨论】:

    【解决方案2】:

    对我来说,我在 http 中丢失了(s)。所以我使用的网址是

    http://localhost:5001/odata/People
    

    当我将其更改为 https

    https://localhost:5001/odata/People
    

    事情又开始起作用了。

    【讨论】:

      猜你喜欢
      • 2018-01-29
      • 1970-01-01
      • 2020-12-19
      • 2015-05-03
      • 2015-10-30
      • 2014-07-27
      • 2021-01-02
      • 1970-01-01
      相关资源
      最近更新 更多