Отправка личного сообщения с помощью Flask -Socketio и Vue - PullRequest
0 голосов
/ 13 июля 2020

Я пытаюсь отправить запрос на добавление в друзья / сообщение от одного клиента к другому, указанному клиенту 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 получатель?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...