我正在尝试通过使用Flask-socketIO将朋友的请求/消息从一个客户端发送到另一个特定的客户端。
我一直遵循https://www.youtube.com/watch?v=mX7hPZidPPY和Instant messaging with 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')"
时,什么也没发送。
后端
在我的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.
以下代码在socket_users词典中输入用户和sid。
@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)
如果我运行以下命令,则不会收到针对特定收件人在客户端运行的警报,但是如果我全部添加broadcast = True或一起删除“ room = recipient_session_id”,那么它将起作用。
问题
如何获取要发送给特定收件人的邮件?