更新 Debug/test_sse_connection.py
This commit is contained in:
@@ -14,6 +14,7 @@ import http.client
|
||||
import time
|
||||
import sys
|
||||
import socket
|
||||
import json
|
||||
|
||||
def test_sse_connection(host="127.0.0.1", port=4550, path="/", timeout=30):
|
||||
"""
|
||||
@@ -54,31 +55,24 @@ def test_sse_connection(host="127.0.0.1", port=4550, path="/", timeout=30):
|
||||
start_time = time.time()
|
||||
initial_data = ""
|
||||
received_complete_data = False
|
||||
event_count = 0
|
||||
max_events = 5 # Read 5 events
|
||||
|
||||
# Try to read data for up to 10 seconds
|
||||
while time.time() - start_time < 10 and not received_complete_data:
|
||||
while time.time() - start_time < 10 and not received_complete_data and event_count < max_events:
|
||||
try:
|
||||
# Read data in smaller chunks to avoid truncation
|
||||
chunk = response.read(64).decode('utf-8')
|
||||
chunk = response.read(128).decode('utf-8')
|
||||
if chunk:
|
||||
initial_data += chunk
|
||||
print(f"Received chunk: {chunk}")
|
||||
|
||||
# Count events
|
||||
if "event:" in chunk:
|
||||
event_count += 1
|
||||
|
||||
# Check if we've received complete JSON data
|
||||
if '}' in chunk and 'data:' in initial_data:
|
||||
# Continue reading to ensure we get complete events
|
||||
for _ in range(10): # Try to read more chunks
|
||||
try:
|
||||
more_chunk = response.read(64).decode('utf-8')
|
||||
if more_chunk:
|
||||
initial_data += more_chunk
|
||||
print(f"Received additional chunk: {more_chunk}")
|
||||
else:
|
||||
break
|
||||
except:
|
||||
break
|
||||
time.sleep(0.1)
|
||||
|
||||
if '}' in chunk and 'data:' in initial_data and event_count >= max_events:
|
||||
received_complete_data = True
|
||||
break
|
||||
|
||||
@@ -97,24 +91,49 @@ def test_sse_connection(host="127.0.0.1", port=4550, path="/", timeout=30):
|
||||
print("-" * 50)
|
||||
print(initial_data)
|
||||
print("-" * 50)
|
||||
|
||||
# Try to parse events
|
||||
try:
|
||||
events = []
|
||||
current_event = {}
|
||||
for line in initial_data.split('\n'):
|
||||
line = line.strip()
|
||||
if not line or line.startswith(':'):
|
||||
continue
|
||||
|
||||
if line.startswith('event:'):
|
||||
if current_event and 'event' in current_event:
|
||||
events.append(current_event)
|
||||
current_event = {}
|
||||
current_event['event'] = line[6:].strip()
|
||||
elif line.startswith('data:'):
|
||||
if 'data' not in current_event:
|
||||
current_event['data'] = line[5:].strip()
|
||||
else:
|
||||
current_event['data'] += line[5:].strip()
|
||||
|
||||
if current_event and 'event' in current_event:
|
||||
events.append(current_event)
|
||||
|
||||
print("\nParsed Events:")
|
||||
print("-" * 50)
|
||||
for i, event in enumerate(events):
|
||||
print(f"Event {i+1}: {event['event']}")
|
||||
try:
|
||||
data = json.loads(event['data'])
|
||||
print(f"Data: {json.dumps(data, indent=2)}")
|
||||
except:
|
||||
print(f"Data: {event['data']}")
|
||||
print()
|
||||
print("-" * 50)
|
||||
except Exception as e:
|
||||
print(f"Error parsing events: {e}")
|
||||
else:
|
||||
print("Warning: No initial data received after 10 seconds")
|
||||
print("This doesn't necessarily mean the connection failed.")
|
||||
print("The server might be configured to not send initial data.")
|
||||
print("Connection is established (200 OK), which is a good sign.")
|
||||
|
||||
# Read more data for a few seconds
|
||||
print("\nReading data for 5 seconds...")
|
||||
start_time = time.time()
|
||||
while time.time() - start_time < 5:
|
||||
try:
|
||||
data = response.read(1024).decode('utf-8')
|
||||
if data:
|
||||
print(f"Received data: {data}")
|
||||
except socket.timeout:
|
||||
print("Socket timeout while reading additional data, continuing...")
|
||||
time.sleep(0.5)
|
||||
|
||||
# Close connection
|
||||
print("\nClosing connection...")
|
||||
conn.close()
|
||||
|
Reference in New Issue
Block a user