Portanto, quando estou testando localmente coisas como Ajax em aplicativos que estou escrevendo, geralmente gosto de adicionar um atraso nos scripts do lado do servidor usando uma sleep
instrução. Ajuda a simular conexões lentas, etc.
Existe uma maneira de especificar um comportamento de atraso semelhante diretamente na configuração do Nginx que funcionaria para os arquivos HTML simples que ele está servindo?
Estou ciente de que você pode fazer uma simulação de atraso semelhante no nível da rede (consulteaqui), mas parece muito confuso e nunca funcionou muito bem para mim.
Responder1
Você deve tentar um módulo de eco.
Responder2
Dando uma explicação mais detalhada de como você pode usar o módulo echo:
Se você está começando com uma configuração básica, que carrega arquivos estáticos e arquivos PHP, com algo assim:
location ~ \.php$ {
include fastcgi.conf;
fastcgi_pass php;
}
Isso pode então ser convertido para algo assim para adicionar um atraso às solicitações estáticas e PHP:
# Static files
location / {
echo_sleep 5;
echo_exec @default;
}
location @default {}
# PHP files
location ~ \.php$ {
echo_sleep 5;
echo_exec @php;
}
location @php {
include fastcgi.conf;
fastcgi_pass php;
}
Obviamente, isso pode ser modificado para o que você quiser. Basicamente, mova cada bloco de localização para um @location nomeado. Em seguida, use echo_sleep
e echo_exec
no bloco de localização original.
Responder3
Eu gostaria de adicionarresposta de astlockque se você quiser responder de forma simples return
, observe que há uma ressalva: vocêprecisause , não uma diretiva echo
padrão , depois de responder com atraso, assim:return
echo_sleep
location = /slow-reply {
echo_sleep 5.0;
#return 200 'this response would NOT be delayed!';
echo 'this text will come in response body with HTTP 200 after 5 seconds';
}
(Testado em openresty/1.7.10.2)
Responder4
O script python a seguir funcionou bem para mim e, IMHO, vale a pena compartilhar.
#!/usr/bin/env python
# Includes
import getopt
import sys
import os.path
import subprocess
from http.server import HTTPServer
from http.server import BaseHTTPRequestHandler
import socketserver
import time
######## Predefined variables #########
helpstring = """Usage: {scriptname} args...
Where args are:
-h, --help
Show help
-p PORTNUMBER
Port number to run on
-d delay-in-seconds
How long to wait before responding
"""
helpstring = helpstring.format(scriptname=sys.argv[0])
def beSlow(seconds):
time.sleep(float(seconds))
######## Functions and classes #########
class SlowserverRequestHandler(BaseHTTPRequestHandler):
def do_GET(s):
if s.path == "/slow":
# Check status
# Assume fail
code = 200
status = ""
# Be slow for a while
beSlow(seconds)
s.send_response(200)
s.send_header("Content-type", "text/html")
s.end_headers()
s.wfile.write(b"I'm a slow response LOL\n")
else:
s.send_response(200)
s.send_header("Content-type", "text/html")
s.end_headers()
s.wfile.write(b"slowserver - reporting for duty. Slowly...\n")
# Parse args
try:
options, remainder = getopt.getopt(sys.argv[1:], "hp:d:", ['help'])
except:
print("Invalid args. Use -h or --help for help.")
raise
sys.exit(1)
HTTPPORT = 8000
for opt, arg in options:
if opt in ('-h', '--help'):
print(helpstring)
sys.exit(0)
elif opt in ('-p'):
HTTPPORT = int(arg)
elif opt in ('-d'):
seconds = arg
# Start HTTP service
server_class=HTTPServer
handler_class=SlowserverRequestHandler
server_address = ('', HTTPPORT)
httpd = server_class(server_address, handler_class)
try:
httpd.serve_forever()
except KeyboardInterrupt:
pass
httpd.server_close()