diff --git a/moderation/backend-py/websocket_server.py b/moderation/backend-py/websocket_server.py index 1b5bdff..cd5ea43 100644 --- a/moderation/backend-py/websocket_server.py +++ b/moderation/backend-py/websocket_server.py @@ -38,21 +38,21 @@ def broadcast_online(): sio.emit('online', online_list, namespace='/mod-chat') -# Создаем класс для корневого namespace -class RootNamespace(socketio.AsyncNamespace): - """Root namespace handler for Socket.IO handshake""" - async def on_connect(self, sid, environ): - """Handle client connection to root namespace (Socket.IO handshake)""" - print(f"[WebSocket] 🔄 Handshake to ROOT namespace: {sid}") - print(f"[WebSocket] Environ type: {type(environ)}") - if environ: - print(f"[WebSocket] Environ keys: {list(environ.keys()) if isinstance(environ, dict) else 'N/A'}") - logger.info(f"[WebSocket] Handshake to ROOT namespace: {sid}") - # Разрешаем подключение для handshake - return True - -# Регистрируем корневой namespace -sio.register_namespace(RootNamespace('/')) +# Обработчик для корневого namespace (требуется для Socket.IO handshake) +# В python-socketio для корневого namespace нужно использовать @sio.on('connect') без namespace +print("[WebSocket] Регистрация обработчика корневого namespace...") +@sio.on('connect') +async def on_connect_root(sid, environ): + """Handle client connection to root namespace (Socket.IO handshake)""" + print(f"[WebSocket] 🔄 Handshake to ROOT namespace: {sid}") + print(f"[WebSocket] Environ type: {type(environ)}") + if environ: + print(f"[WebSocket] Environ keys: {list(environ.keys()) if isinstance(environ, dict) else 'N/A'}") + logger.info(f"[WebSocket] Handshake to ROOT namespace: {sid}") + # Разрешаем подключение для handshake + # Возвращаем True, чтобы разрешить подключение + return True +print("[WebSocket] ✅ Обработчик корневого namespace зарегистрирован") # Namespace handlers for /mod-chat @sio.on('connect', namespace='/mod-chat') diff --git a/moderation/frontend/src/App.jsx b/moderation/frontend/src/App.jsx index aa76d7f..57d89ee 100644 --- a/moderation/frontend/src/App.jsx +++ b/moderation/frontend/src/App.jsx @@ -659,7 +659,9 @@ export default function App() { console.log('[Chat] Подключение к Socket.IO:', socketUrl); console.log('[Chat] Использование namespace: /mod-chat'); + // Подключаемся к корневому URL, но указываем namespace в опциях const socket = io(socketUrl, { + path: '/socket.io', namespace: '/mod-chat', transports: ['websocket', 'polling'], reconnection: true,