javascript - 在 FlaskSocketIO 聊天中设置动态聊天室
问题描述
我想让我的迷你聊天的用户动态地创建他们的房间。现在我在烧瓶服务器应用程序中得到了 const :
# Predefined rooms for chat
ROOMS = ["Lounge", "news", "games", "coding", "food", "cars"]
用户加入/离开路线在烧瓶中:
@socketio.on('join')
def on_join(data):
username = data["username"]
room = data["room"]
join_room(room)
# Notofication about new user joined room
send({"msg": username + " has joined the " + room + " room."}, room=room)
@socketio.on('leave')
def on_leave(data):
leave_room(data['room'])
# Notification about leaving users
send({'msg': data['username'] + " has left the " + data['room']}, room=data['room'])
在 js 上。一边是这样的:
// Select a room
document.querySelectorAll('.select-room').forEach(p => {
p.onclick = () => {
let newRoom = p.innerHTML
// Check if user already in the room
if (newRoom === room) {
msg = `You are already in ${room} room.`;
printSysMsg(msg);
} else {
leaveRoom(room);
joinRoom(newRoom);
room = newRoom;
}
};
});
// Trigger 'join' event
function joinRoom(room) {
// Join room
socket.emit('join', {'username': username, 'room': room});
// Trigger 'leave' event if user was previously on a room
function leaveRoom(room) {
socket.emit('leave', {'username': username, 'room': room});
我如何让用户加入他们动态创建的房间?
解决方案
也许你可以为你的服务器端做这样的事情:
@socketio.on('join')
def on_join(data):
username = data["username"]
room = data["room"]
join_room(room)
# Notofication about new user joined room
send({"msg": username + " has joined the " + room + " room."}, room=room)
@socketio.on('leave')
def on_leave(data):
leave_room(data['room'])
# Notification about leaving users
send({'msg': data['username'] + " has left the " + data['room']}, room=data['room'])
@socketio.on('new_room')
def new_room(data):
ROOMS.append(data['new_room_name'])
room = data['new_room_name']
username = data['username']
join_room(data['new_room_name'])
# Notification about new user joined room
send({"msg": username + " has created the " + room + " room."}, room=room)
和客户端:
// Select a room
document.querySelectorAll('.select-room').forEach(p => {
p.onclick = () => {
let newRoom = p.innerHTML
// Check if user already in the room
if (newRoom === room) {
msg = `You are already in ${room} room.`;
printSysMsg(msg);
} else {
leaveRoom(room);
joinRoom(newRoom);
room = newRoom;
}
};
});
// Trigger 'join' event
function joinRoom(room) {
// Join room
socket.emit('join', {'username': username, 'room': room});
}
// Trigger 'leave' event if user was previously on a room
function leaveRoom(room) {
socket.emit('leave', {'username': username, 'room': room});
}
// Trigger this event when a new room needs to be created
function newRoom(room) {
socket.emit('new_room', {'username': username, 'room': room});
}
我没有测试过这段代码,所以如果有语法错误,请原谅我,或者它只是不起作用,但我相信它应该。
推荐阅读
- java - 并行无限 Java 流内存不足
- python - Pygame 和类
- r-leaflet - RPubs 为 Leaflet 热图显示错误的颜色
- git - 找到离疏远代码库最近的祖先提交
- angular - Postman 给出成功响应,而通过 Angular 代码调用相同的 API 时会抛出错误
- java - 在 Java 中,如果值错误、返回或引发异常,退出构造函数的最佳做法是什么?
- php - 创建函数并调用它
- embedded - 融合来自多个传感器的异步测量
- c# - 在这种情况下如何修复 CS0176
- android - 来自 Firestore 的自定义对象的 ArrayList 添加到 Spinner