Я пытаюсь отправить запрос на добавление в друзья / сообщение от одного клиента к другому, указанному клиенту c, используя Flask -socketIO.
Я следовал инструкциям для бэкэнда на https://www.youtube.com/watch?v=mX7hPZidPPY и Обмен мгновенными сообщениями с Flask -socketIO и для внешнего интерфейса https://www.youtube.com/watch?v=JEYEpledOxs
Внешний интерфейс (Vue)
Когда я активирую функцию входа в систему, имя пользователя попадает в словарь «socket_users» серверной части. Затем он направляет меня на страницу отправки сообщения, где находится кнопка с «send_message». Когда я нажимаю кнопку "send_message", сообщение должно быть отправлено указанному клиенту "user2"
Страница входа
Страница, на которой я нажимаю логин для отправки пользователь в socketIO
methods: {
login(){
self.privatesocket.emit('username',self.username_login);
}
}
created(){
this.socket = io("http://127.0.0.1:5000")
this.privatesocket = io("http://127.0.0.1:5000/private")
}
Страница отправки сообщения
Страница, на которой, если я нажму кнопку, запустится функция «Отправить сообщение», а затем сообщение будет отправлено другому клиенту ("user2")
methods: {
send_message(){
var res = [{'username': 'user2'}, {'message': "want to be friends?"}]
this.privatesocket.emit('private_message',res);
}
},
created(){
this.socket = io("http://127.0.0.1:5000")
this.privatesocket = io("http://127.0.0.1:5000/private")
}
mounted(){
this.privatesocket.on('new_private_message', data =>{
this.$alert("Friend request")
});
}
У меня нет проблем с отправкой другому клиенту, когда я отправляю всем, но это когда я включаю "room=recipient_session_id"
в "@socketio.on('private_message', namespace ='/private')"
что ничего не отправляется.
Backend
В моем python скрипте я создаю экземпляр приложения и socketio, как показано ниже.
app = Flask(__name__, static_folder = "static")
app.config['SECRET_KEY'] = 'secretkey'
app.config['CORS_HEADERS'] = 'Content-Type'
cors = CORS(app, resources={r"/": {"origins": origin_var}})
socketio = SocketIO(app, cors_allowed_origins="*")
socket_users = {} //Socket_users is the dictionary where I input the users that will be using the socket.
Следующий код вводит пользователя и sid в словарь socket_users.
@socketio.on('username',namespace ='/private')
def receive_username(username):
socket_users[username] = request.sid
В следующем коде я проверяю, находится ли пользователь в словаре socket_users.
@socketio.on('private_message', namespace ='/private')
def private_message(payload):
recipient_session_id = socket_users[payload[0]['username']]
message = payload[1]['message']
emit('new_private_message', {"message":message},room=recipient_session_id)
Если я запустил следующее: не запускать предупреждение на стороне клиента для указанного получателя c но если я добавлю broadcast = True или удалю room = recipient_session_id все вместе, тогда это сработает.
Вопрос
Как я могу получить сообщение, которое будет отправлено указанному c получатель?