使用 flask-socketIO 作为通知处理程序(服务器-客户端)连接
useing flask-socketIO as a Notification Handler (server-client ) connection
我是 socketIO 的新手,我正在尝试使用它构建一个通知系统。
它在 flask-socketIO Official website link 上说这是可能的并且已经准备好了。但出于某种原因,我一直收到错误
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'\n\n >> data: {data}\n\n')
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 路由而不是 Socket.IO 事件,所以您需要提供一些在 Socket.IO 连接之外不可用的信息。因此,在 Socket.IO 处理程序之外使用 emit()
时需要 namespace
和 sid
参数。
我是 socketIO 的新手,我正在尝试使用它构建一个通知系统。
它在 flask-socketIO Official website link 上说这是可能的并且已经准备好了。但出于某种原因,我一直收到错误
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'\n\n >> data: {data}\n\n')
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 路由而不是 Socket.IO 事件,所以您需要提供一些在 Socket.IO 连接之外不可用的信息。因此,在 Socket.IO 处理程序之外使用 emit()
时需要 namespace
和 sid
参数。