kopia lustrzana https://github.com/cirospaciari/socketify.py
84 wiersze
2.2 KiB
Python
84 wiersze
2.2 KiB
Python
import sys
|
|
import io
|
|
import time
|
|
import datetime
|
|
import socket
|
|
import optparse
|
|
|
|
parser = optparse.OptionParser("usage: %prog [options]", add_help_option=False)
|
|
parser.add_option("-h", "--host", dest="host", default='127.0.0.1', type="string")
|
|
parser.add_option("-p", "--port", dest="port", default=3000, type="int")
|
|
(opt, args) = parser.parse_args()
|
|
|
|
def get_request(path = r'/', host = '127.0.0.1', port = 3000):
|
|
req = f'GET {path}' + r' HTTP/1.1' + '\r\n'
|
|
req += f'Host: {host}:{port}\r\n'
|
|
req += r'User-Agent: curl/7.66.0' + '\r\n'
|
|
req += r'Accept: */*' + '\r\n'
|
|
req += '\r\n'
|
|
return req
|
|
|
|
payload_tiny = get_request(host = opt.host, port = opt.port)
|
|
payload_tiny = payload_tiny.encode('utf-8')
|
|
|
|
def create_sock(timeout = 0.001):
|
|
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
sock.settimeout(timeout)
|
|
sock.connect((opt.host, opt.port))
|
|
return sock
|
|
|
|
sock = create_sock()
|
|
sock.sendall(payload_tiny)
|
|
time.sleep(0.020)
|
|
resp = sock.recv(4096)
|
|
print('====== response ========')
|
|
print(resp.decode('utf-8'))
|
|
print('========================')
|
|
sock.close()
|
|
|
|
start_time = datetime.datetime.now()
|
|
test1_limit = start_time + datetime.timedelta(seconds = 1)
|
|
test2_limit = test1_limit + datetime.timedelta(seconds = 10)
|
|
|
|
sock = create_sock()
|
|
while True:
|
|
if datetime.datetime.now() >= test1_limit:
|
|
break
|
|
sock.sendall(payload_tiny)
|
|
try:
|
|
resp = sock.recv(4096)
|
|
except socket.timeout:
|
|
pass
|
|
|
|
print(f'Test 1 completed!')
|
|
sock.close()
|
|
|
|
req_num = 1000*1000
|
|
payload_huge = payload_tiny * req_num
|
|
#print(len(payload_huge))
|
|
print(f'Run test 2 ...')
|
|
totalsent = 0
|
|
totalresp = b''
|
|
sock = create_sock()
|
|
while True:
|
|
if datetime.datetime.now() >= test2_limit:
|
|
print(f'Test 2: Timeout exceeded!')
|
|
break
|
|
try:
|
|
rc = sock.send(payload_huge[totalsent:])
|
|
if rc == 0:
|
|
#raise RuntimeError("socket connection broken")
|
|
pass
|
|
totalsent += rc
|
|
resp = sock.recv(65*1024)
|
|
totalresp += resp
|
|
except socket.timeout:
|
|
pass
|
|
except ConnectionResetError:
|
|
print(f'totalsent = {totalsent}, totalrecv = {len(totalresp)}')
|
|
print(f'LastResp: {totalresp[-256:]}')
|
|
raise
|
|
|
|
sock.close()
|
|
print("==== Test Finish =====")
|