From 9d8e78fe2ac706381fba8b05c7d5482c6ab17524 Mon Sep 17 00:00:00 2001 From: sirmrak Date: Wed, 20 May 2026 22:46:53 +0300 Subject: [PATCH] =?UTF-8?q?fix:=20=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D1=82=D1=8C=20=D0=B1=D0=B0=D0=B3=D0=B8=20web=20=D1=81?= =?UTF-8?q?=D0=B5=D1=80=D0=B2=D0=B5=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - IndexError в log_message — убран неправильный формат - Ctrl+C не работал — добавлен signal_handler - Порт не освобождался — добавлен server_close() - allow_reuse_address=True — для быстрого рестарта - Добавлен remote URL в баннер --- .../websocket-service/start_web_server.py | 37 ++++++++++++++++--- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/examples/websocket-service/start_web_server.py b/examples/websocket-service/start_web_server.py index 9c0b93a..1ecb1b6 100755 --- a/examples/websocket-service/start_web_server.py +++ b/examples/websocket-service/start_web_server.py @@ -13,24 +13,41 @@ import argparse import http.server import socketserver import os +import signal +import sys from pathlib import Path PORT = 8080 SCRIPT_DIR = Path(__file__).parent.resolve() +# Global server reference for cleanup +httpd = None + class CustomHandler(http.server.SimpleHTTPRequestHandler): """Custom handler with better logging.""" def do_GET(self): super().do_GET() - self.log_message(f"✅ Served: {self.path}") + print(f"[WebServer] ✅ {self.requestline} → {self.command} {self.path}") def log_message(self, format, *args): - print(f"[WebServer] {args[0]}") + # Suppress default logging + pass + + +def signal_handler(sig, frame): + """Handle Ctrl+C gracefully.""" + print("\n👋 Shutting down...") + if httpd: + httpd.shutdown() + httpd.server_close() + sys.exit(0) def main(): + global httpd + parser = argparse.ArgumentParser(description='WebSocket Client Web Server') parser.add_argument('--port', type=int, default=PORT, help=f'Port (default: {PORT})') parser.add_argument('--host', default='0.0.0.0', help='Host (default: 0.0.0.0)') @@ -39,24 +56,34 @@ def main(): # Change to websocket-service directory os.chdir(SCRIPT_DIR) + # Register signal handlers + signal.signal(signal.SIGINT, signal_handler) + signal.signal(signal.SIGTERM, signal_handler) + + # Allow socket reuse + socketserver.TCPServer.allow_reuse_address = True + print(f""" ╔══════════════════════════════════════════════════════════╗ ║ 🛰️ Wyoming Satellite WebSocket Client Server ║ ╠══════════════════════════════════════════════════════════╣ ║ Serving: {str(SCRIPT_DIR):<45} ║ ║ URL: http://localhost:{args.port:<36} ║ +║ Remote: http://:{args.port:<32} ║ ║ ║ ║ Press Ctrl+C to stop ║ ╚══════════════════════════════════════════════════════════╝ """) with socketserver.TCPServer((args.host, args.port), CustomHandler) as httpd: + print(f"🚀 Server started on http://{args.host}:{args.port}") try: - print(f"🚀 Server started on http://{args.host}:{args.port}") httpd.serve_forever() except KeyboardInterrupt: - print("\n👋 Shutting down...") - httpd.shutdown() + pass + finally: + print("\n👋 Server stopped") + httpd.server_close() if __name__ == "__main__":