使用flask-socketIO作为通知处理程序(服务器-客户端)连接



我是使用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()时需要namespacesid参数。输入输出处理程序。

相关内容

  • 没有找到相关文章

最新更新