tianyun 3 tháng trước cách đây
mục cha
commit
ca7d133e31
2 tập tin đã thay đổi với 49 bổ sung21 xóa
  1. 19 16
      chat-room/main.py
  2. 30 5
      chat-room/templates/room.html

+ 19 - 16
chat-room/main.py

@@ -1,64 +1,67 @@
 # app.py
 from flask import Flask, render_template, request
 from flask_socketio import SocketIO, join_room, leave_room
+from flask_cors import CORS
+import logging
 
 app = Flask(__name__)
+CORS(app, resources={r"/*": {"origins": "*"}})
 app.config['SECRET_KEY'] = 'secret!'
-socketio = SocketIO(app, cors_allowed_origins="*")
+socketio = SocketIO(app, cors_allowed_origins="*", logger=True, engineio_logger=True)
+
+# 配置日志
+logging.basicConfig(level=logging.DEBUG)
 
 rooms = {}
 
+@socketio.on('connect')
+def on_connect():
+    logging.info(f"Client connected: {request.sid}")
+
+@socketio.on('disconnect')
+def on_disconnect():
+    logging.info(f"Client disconnected: {request.sid}")
 
 @socketio.on('join')
 def on_join(data):
     room = data['room']
     join_room(room)
     rooms[request.sid] = room
+    logging.info(f"User {request.sid} joined room {room}")
     socketio.emit('user_joined', request.sid, room=room, skip_sid=request.sid)
     socketio.emit('message', {'type': 'system', 'msg': '新用户加入'}, room=room)
 
-
 @socketio.on('leave')
 def on_leave():
     room = rooms.get(request.sid)
     if room:
         leave_room(room)
         del rooms[request.sid]
+        logging.info(f"User {request.sid} left room {room}")
         socketio.emit('user_left', request.sid, room=room)
         socketio.emit('message', {'type': 'system', 'msg': '用户离开'}, room=room)
 
-
 @socketio.on('offer')
 def handle_offer(data):
     data['sender'] = request.sid
+    logging.info(f"Offer from {request.sid} to {data['target']}")
     socketio.emit('offer', data, room=data['target'])
 
 @socketio.on('answer')
 def handle_answer(data):
     data['sender'] = request.sid
+    logging.info(f"Answer from {request.sid} to {data['target']}")
     socketio.emit('answer', data, room=data['target'])
 
 @socketio.on('candidate')
 def handle_candidate(data):
     data['sender'] = request.sid
+    logging.info(f"ICE candidate from {request.sid} to {data['target']}")
     socketio.emit('candidate', data, room=data['target'])
 
-@socketio.on('answer')
-def handle_answer(data):
-    data['sender'] = request.sid
-    # 发送给指定用户
-    socketio.emit('answer', data, room=data['target'])
-
-@socketio.on('candidate')
-def handle_candidate(data):
-    data['sender'] = request.sid
-    socketio.emit('candidate', data, room=data['target'])
-
-
 @app.route('/room/<room_id>')
 def room(room_id):
     return render_template('room.html', room_id=room_id)
 
-
 if __name__ == '__main__':
     socketio.run(app, host='0.0.0.0', port=15000, debug=True, allow_unsafe_werkzeug=True)

+ 30 - 5
chat-room/templates/room.html

@@ -16,13 +16,38 @@
     const room_id = "{{ room_id }}";
     let isMute = true;
     let localStream;
-    let socket = io();
+    let socket;
     const peers = {};
 
-      // 初始化WebSocket连接
-      socket.on("connect", () => {
-        socket.emit("join", { room: room_id });
-      });
+    // 初始化WebSocket连接
+    function initSocket() {
+        socket = io({
+            transports: ['websocket'],
+            upgrade: false,
+            reconnection: true,
+            reconnectionAttempts: 5
+        });
+
+        socket.on('connect', () => {
+            console.log('Connected to server');
+            document.getElementById('status').innerHTML = "已连接到服务器";
+            socket.emit("join", { room: room_id });
+        });
+
+        socket.on('connect_error', (error) => {
+            console.error('Connection error:', error);
+            document.getElementById('status').innerHTML = "连接错误: " + error.message;
+        });
+
+        socket.on('disconnect', (reason) => {
+            console.log('Disconnected:', reason);
+            document.getElementById('status').innerHTML = "已断开连接: " + reason;
+        });
+
+        // 其他事件处理...
+    }
+
+    initSocket();
 
       // 获取麦克风权限
       async function init() {