究极无敌稳定版

main
wang 4 weeks ago
parent d8833c9193
commit 9a9352b340

@ -40,7 +40,7 @@ EXPOSE 5001/udp
# 创建启动脚本
RUN echo '#!/bin/bash\n\
python voice_udp_server.py &\n\
gunicorn --workers 2 --bind 0.0.0.0:5000 app:app\n\
gunicorn --workers 1 --worker-class eventlet --bind 0.0.0.0:5000 app:app\n\
' > /app/start.sh && chmod +x /app/start.sh
# 使用启动脚本启动应用

@ -638,33 +638,36 @@ def handle_send_message(data):
if not room_id or not message_text:
return
# 获取用户和房间信息
user = User.query.get(user_id)
room = ChatRoom.query.get(room_id)
if not user or not room:
return
# 保存消息到数据库
message = ChatMessage(
room_id=room_id,
user_id=user_id,
message=message_text,
message_type='text'
)
db.session.add(message)
db.session.commit()
# 广播消息给房间内的所有用户
emit('new_message', {
'id': message.id,
'user_id': user_id,
'username': user.username,
'message': message_text,
'message_type': 'text',
'created_at': message.created_at.isoformat()
}, room=str(room_id))
try:
with app.app_context():
user = User.query.get(user_id)
room = ChatRoom.query.get(room_id)
if not user or not room:
return
message = ChatMessage(
room_id=room_id,
user_id=user_id,
message=message_text,
message_type='text'
)
db.session.add(message)
db.session.commit()
emit('new_message', {
'id': message.id,
'user_id': user_id,
'username': user.username,
'message': message_text,
'message_type': 'text',
'created_at': message.created_at.isoformat()
}, room=str(room_id))
except Exception as e:
logger.error(f"处理文本消息时出错: {e}")
db.session.rollback()
@socketio.on('send_audio_message')
def handle_send_audio_message(data):
@ -704,40 +707,38 @@ def handle_send_audio_message(data):
logger.info(f"处理语音消息: 用户ID={user_id}, 房间ID={room_id}, 音频时长={audio_duration}秒, MIME类型={audio_mime_type}, 数据长度={len(audio_data)}")
try:
# 获取用户和房间信息
user = User.query.get(user_id)
room = ChatRoom.query.get(room_id)
if not user or not room:
logger.error(f"用户或房间不存在: user_id={user_id}, room_id={room_id}")
return
# 保存消息到数据库
message = ChatMessage(
room_id=room_id,
user_id=user_id,
message=audio_data, # 存储Base64编码的音频数据
message_type='audio',
audio_duration=audio_duration
)
db.session.add(message)
db.session.commit()
logger.info(f"语音消息已保存到数据库: ID={message.id}")
# 广播消息给房间内的所有用户
emit('new_message', {
'id': message.id,
'user_id': user_id,
'username': user.username,
'message': audio_data,
'message_type': 'audio',
'audio_duration': audio_duration,
'audio_mime_type': audio_mime_type,
'created_at': message.created_at.isoformat()
}, room=str(room_id))
logger.info(f"语音消息已广播到房间: {room_id}")
with app.app_context():
user = User.query.get(user_id)
room = ChatRoom.query.get(room_id)
if not user or not room:
logger.error(f"用户或房间不存在: user_id={user_id}, room_id={room_id}")
return
message = ChatMessage(
room_id=room_id,
user_id=user_id,
message=audio_data,
message_type='audio',
audio_duration=audio_duration
)
db.session.add(message)
db.session.commit()
logger.info(f"语音消息已保存到数据库: ID={message.id}")
emit('new_message', {
'id': message.id,
'user_id': user_id,
'username': user.username,
'message': audio_data,
'message_type': 'audio',
'audio_duration': audio_duration,
'audio_mime_type': audio_mime_type,
'created_at': message.created_at.isoformat()
}, room=str(room_id))
logger.info(f"语音消息已广播到房间: {room_id}")
except Exception as e:
logger.error(f"处理语音消息时出错: {e}")
db.session.rollback()

@ -0,0 +1,19 @@
# Dependencies
/node_modules
# Build files
/dist
# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# IDE and editor directories
.idea
.vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

@ -1,3 +1,8 @@
upstream backend {
ip_hash;
server backend:5000;
}
server {
listen 80 default_server;
listen [::]:80 default_server;
@ -76,7 +81,7 @@ server {
# API请求代理到后端服务
location /api/ {
proxy_pass http://backend:5000;
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
@ -88,7 +93,7 @@ server {
# Socket.IO请求代理到后端服务
location /socket.io/ {
proxy_pass http://backend:5000;
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
@ -104,7 +109,7 @@ server {
# 支持WebRTC信令转发
location /rtc/ {
proxy_pass http://backend:5000;
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

File diff suppressed because one or more lines are too long

@ -310,14 +310,10 @@ export default {
// Socket
const initSocketConnection = () => {
// Socket
const currentHost = window.location.hostname;
const url = `http://${currentHost}:5000`;
// 使WebSocket
socket = io(url, {
// URL
socket = io({
withCredentials: true,
transports: ['polling'],
// pathNginx
path: '/socket.io'
});

Loading…
Cancel
Save