# app.py from flask import Flask, render_template, request from flask_socketio import SocketIO, join_room, leave_room app = Flask(__name__) app.config['SECRET_KEY'] = 'secret!' socketio = SocketIO(app, cors_allowed_origins="*") rooms = {} @socketio.on('join') def on_join(data): room = data['room'] join_room(room) rooms[request.sid] = room 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] socketio.emit('message', {'type': 'system', 'msg': '用户离开'}, room=room) @socketio.on('offer') def handle_offer(data): # 添加发送者标识 data['sender'] = request.sid # 广播给房间内其他用户 socketio.emit('offer', data, room=data['room'], skip_sid=request.sid) @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']) @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/') 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)