我是使用socketIO的新手,我正在尝试使用它建立一个通知系统。
flask-socketIO官方网站链接这是可能的,准备好了。但由于某些原因,我一直得到错误
AttributeError: 'Request' object has no attribute 'namespace'
pythonApp.py
@app.route("/ajaxHandler", methods=['post'])
def ajaxHandler(userSessionId):
if request.method == 'POST':
data = request.get_json()
print(f'nn >> data: {data}nn')
notify_User({'test':'test1'},userSessionId) # >>>> Notice 1
return jsonify({'Ajax': 'completed'})
@socketio.on('notify_User' , namespace='/notifications/')
def notify_User(data,sid):
msg= {"hi": hello}
emit('notify_User',msg, room=sid) # >>> Notice 2
Notice 1: I could pull userSessionId from database but for the sake of this example i'm pullingit from the user
Notice 2 : the error is generated from this line
socket_Io.js
document.addEventListener('DOMContentLoaded', () => {
// Connect to websocket
var socket = io.connect(location.protocol + '//' + document.domain + ':' + location.port);
var socket = io();
socket.on("notify_User",(data) => {
console.log(`i got this : ${data}`)
});
我一直在到处搜索错误,但我找不到任何可以帮助我的情况的答案。
notify_User()
定义为Socket。IO事件处理程序。此函数将在客户端发出notify_User
事件时自动运行。
你在ajaxHandler()
视图函数中直接调用这个函数。这不是正确的用法,一个Socket。IO事件处理程序不应该从服务器调用,客户端在发出Socket时触发此函数。IO事件。
如果您想从ajaxHandler()
路由向客户端发出事件,那么使用emit()
函数来这样做。因为这是HTTP路由,而不是套接字。事件时,您将需要提供一些在套接字之外不可用的信息。输入输出连接。因此,在套接字外部使用emit()
时需要namespace
和sid
参数。输入输出处理程序。