Как я могу подключиться к комнатам в Flask-socket?Python

Программы на Python
Anonymous
Как я могу подключиться к комнатам в Flask-socket?

Сообщение Anonymous »

Я работал над созданием сайта и столкнулся с проблемой подключения к созданным комнатам. Я создаю комнату и даже захожу на саму страницу, но это только для того, кто ее создал, если я попытаюсь подключиться к ней из другого браузера, то не найду эту комнату.
Комментированный код на Python:

Код: Выделить всё

@app.route("/youtube", methods=['GET', 'POST'])
@login_required
def youtube():
if request.method == 'POST':
url = request.form['hrf']
nameroom = request.form['nameRoom'] # taking video link and room name
if get_video_id(url):
print('done')
return redirect(url_for('room', nameRoom=nameroom))
else:
flash('Something went wrong, please try again.', 'danger')
nameroom = create_name_room()
return render_template('youtube.html', nameRoom=nameroom) # On this page we create a room when you click on the button

@app.route("/room/", methods=['GET', 'POST'])
@login_required
def room(nameRoom):  # room page
if request.method == 'GET':
url = sess.get('current_url') # taking from the session a link to a video that would be written in /youtube
if url:
print('Room name', nameRoom)
print(url)
sess.pop('current_url', '')
return render_template('roomyutube.html', id=get_video_id(url)) #processing a page with chat and video
else:
error = 'not_room' # if we did not write a link or wrote something incomprehensible, an error page is displayed
return render_template('error.html', error=error)

@socketio.on('create_room')
def create_room(data):
room_name = data['roomName']
url = data['videoUrl']

join_room(room_name)

sess['current_url'] = url
emit('room_created', {'roomName': room_name}, room=room_name)

@socketio.on('connect')
def handle_connect():
print('Client connected')

@socketio.on('disconnect')
def handle_disconnect():
print('Client disconnected')

@socketio.on('join')
def on_join(data):
username = data['username']
room = data['room']
print('join')
join_room(room)
send(username + ' has entered the room.', room=room)

@socketio.on('leave')
def on_leave(data):
username = data['username']
room = data['room']
print('leave')
leave_room(room)
send(username + ' has left the room.', room=room)

@socketio.on('chat_message')
def handle_message(data):
message = data['message']
room = data['room']
send(message, room=room)
JS-код из html:
youtube.html:

Код: Выделить всё

var socket = io();

document.getElementById('createRoomForm').addEventListener('submit', function(event) {
event.preventDefault();
var roomName = '{{ nameRoom }}';
var videoUrl = document.getElementById('hrf').value;
socket.emit('create_room', { roomName: roomName, videoUrl: videoUrl });
});

socket.on('room_created', function(data) {
window.location.href = '/room/' + data.roomName;
});
roomyutube.html:

Код: Выделить всё

var socket = io();

function sendMessage() {
var message = document.getElementById("chat-input").value;
document.getElementById("chat-input").value = "";
socket.emit('chat_message', message);
}

socket.on('chat_message', function(message) {
var chatContainer = document.getElementById("chat-container");
var chatMessage = document.createElement("p");
chatMessage.innerHTML = message;
chatContainer.appendChild(chatMessage);
});
socket.on('play_video', function(data) {
var videoUrl = data.videoUrl;
// (player.js)
});
Я попробовал все варианты подключения согласно документации, но в любом случае выдавало ошибку. Я сделал так, чтобы при нажатии на кнопку сразу перенаправлялся в комнату через js, потому что иначе метод POST у меня не работал. Бывает, что ссылка не сохранилась в сессии, поэтому я ввел дополнительную переменную для ссылок 'sess'

Подробнее здесь: https://stackoverflow.com/questions/782 ... ask-socket

Вернуться в «Python»