http://flask-socketio.readthedocs.io/en/latest/
emit
的用法有两个描述。
发出一个SocketIO事件。
此函数向一个或多个连接的客户端发出SocketIO事件。 JSON Blob可以作为有效内容附加到事件。这是一个只能从SocketIO事件处理程序调用的函数,如从当前客户端上下文中获取一些信息。示例:
@socketio.on('my event') def handle_my_custom_event(json): emit('my response', {'data': 42})
Engine.IO服务器配置支持以下设置:
发出服务器生成的SocketIO事件。
此函数向一个或多个连接的客户端发出SocketIO事件。 JSON Blob可以作为有效内容附加到事件。可以在SocketIO事件上下文之外使用此函数,因此,当服务器是事件的发起者,任何客户端上下文之外(例如,在常规HTTP请求处理程序或后台任务中)时,都适合使用此函数。示例:
@app.route('/ping') def ping(): socketio.emit('ping event', {'data': 42}, namespace='/chat')
答案 0 :(得分:0)
我不确定您从哪里推断出第二个功能是“ Engine.IO版本”。那是错的。您要比较的两件事都在Socket.IO包中:
这两者之间的区别仅在于前者是“上下文感知”功能,而后者则不是。两者都发送一个Socket.IO事件,但是对于第一个事件,将从Flask请求上下文中提取默认的接收者和名称空间,因此您只能在上下文可用时使用它。对于第二个,您需要自己提供收件人和名称空间。
我不确定您为什么在此讨论中引入了Engine.IO。这是构建Socket.IO的较低级别的通信协议。它实际上比Socket.IO简单得多,并且只能将消息从服务器发送到单个客户端,或者从客户端发送到服务器。不支持名称空间,房间,广播等。