Вам не хватает 2 вещей.
1-й , вам необходимо отправить событие "join"
на сервер.
<script>
function joinRoom() {
console.log("ask server to join room");
socket.emit("join", { "user": Date.now(), "room": "Notifications" });
}
</script>
<body>
<button onclick="joinRoom()">Join</button>
</body>
Например, здесь я прикрепил триггер к кнопке. И чтобы упростить первоначальное тестирование добавления пользователей в комнаты, я использую Date.now()
в качестве имени пользователя. Вы можете открывать разные вкладки для обслуживания разных пользователей.
2nd , вам нужно иметь обработчик для этого события join
.
В есть пример Комнаты и пространства имен раздел Flask -SocketIO документов.
@socketio.on("join")
def on_join(data):
user = data["user"]
room = data["room"]
print(f"client {user} wants to join: {room}")
join_room(room)
emit("room_message", f"Welcome to {room}, {user}", room=room)
В обработчике вам нужно вызвать метод join_room
, чтобы добавить пользователя в комната под текущим пространством имен . Обратите внимание, что часть о пространстве имен. По умолчанию все соединения находятся в пространстве имен root (/
). Если у вас есть пользовательские пространства имен, то каждое пространство имен будет иметь свои собственные комнаты.
Существует также соответствующий метод leave_room
.
Вот полная сторона сервера код:
@socketio.on("connect")
def connect():
print("client wants to connect")
emit("status", { "data": "Connected. Hello!" })
@socketio.on("join")
def on_join(data):
user = data["user"]
room = data["room"]
print(f"client {user} wants to join: {room}")
join_room(room)
emit("room_message", f"Welcome to {room}, {user}", room=room)
Вот полный код на стороне клиента:
<script type="text/javascript" charset="utf-8">
const socket = io();
socket.on("connect", () => {
console.log("connect");
});
socket.on("status", (status) => {
console.log("received status: " + status.data);
});
socket.on("room_message", (msg) => {
console.log("message from room: " + msg);
});
function joinRoom() {
console.log("ask server to join room");
socket.emit("join", { "user": Date.now(), "room": "Notifications" });
}
</script>
<body>
<button onclick="joinRoom()">Join</button>
</body>
Теперь вы можете открыть несколько вкладок и подключить каждую из них к серверу. На стороне сервера должны отображаться следующие сообщения:
client wants to connect
client wants to connect
client wants to connect
client 1582428076724 wants to join: Notifications
client 1582428080023 wants to join: Notifications
client 1582428082916 wants to join: Notifications
И, если 1-й пользователь войдет в комнату (1582428076724), вы сможете увидеть журналы, когда другие пользователи входят в комнату.
connect
received status: Connected. Hello!
ask server to join room
message from room: Welcome to Notifications, 1582428076724
message from room: Welcome to Notifications, 1582428080023
message from room: Welcome to Notifications, 1582428082916