这段代码应该可行,但它不起作用
一旦客户端连接,会话' keyo'分配给值'示例'
我尝试使用session [' myvariable']
制作一个等效的socket.myvariable@app.route("/a")
def helljo():
return render_template('index.html')
@socketio.on('connect')
def handleMessagae():
session['keyo'] = request.args.get('session') # /a?session=example
emit('connected', session.get('keyo'))
@socketio.on('message')
def handleMessage(message):
emit('message', {'pseudo':session.get('keyo'),'message':message} , broadcast=True, include_self=False)
答案 0 :(得分:1)
正确的做法是:
@app.route("/a")
def helljo():
session['keyo'] = request.args.get('session') # /a?session=example
return render_template('index.html')
@socketio.on('connect')
def handleMessagae():
emit('connected', session.get('keyo'))
@socketio.on('message')
def handleMessage(message):
emit('message', {'pseudo':session.get('keyo'),'message':message} , broadcast=True, include_self=False)
问题是您正在将HTTP请求与Socket.IO请求混合在一起。如果使用某些查询字符串args调用/a
端点,则只能访问该端点的处理程序中的那些参数。但是将它们保存在会话中会使Socket.IO事件处理程序稍后可以访问它们。
答案 1 :(得分:0)
@app.route("/a", methods=['GET'])
def helljo():
session['keyo'] = request.args.get('session')
socketio.emit('EVENT', {'var': session.get('keyo')})
return render_template('index.html')
@socketio.on('connect')
def handleMessagae():
emit('connected', session.get('keyo'))
@socketio.on('message')
def handleMessage(message):
emit('message', {'pseudo':session.get('keyo'),'message':message} , broadcast=True, include_self=False)
这里的问题是,你试图在socketio事件中获取请求参数,这不会起作用,因为请求参数只能在@app.route()
函数内访问。
答案 2 :(得分:0)
此代码的第四行发送给除请求发送者之外的所有客户端。我只想发送给发件人
@app.route("/a", methods=['GET'])
def helljo():
session['keyo'] = request.args.get('session')
socketio.emit('alert_sender', {'resp': session.get('keyo')})
return render_template('index.html')
@socketio.on('connect')
def handleMessagae():
emit('connected', 'hi')
@socketio.on('message')
def handleMessage(message):
emit('message', {'pseudo':session.get('keyo'),'message':message} , broadcast=True, include_self=False)
在index.html上(当我继续/ a?session = example)
...
socket.on('alert_sender', function(data) {
alert(data.resp);
// others receive alert : example sender receive : nothing
});
...
答案 3 :(得分:0)
替代解决方案:
@app.route("/a", methods=['GET'])
def index():
resp = request.args.get('session')
return render_template( 'index.html' , resp=resp )
@socketio.on('My_Event')
def message(msg):
print(msg)
index.html上的
<script>
// ...
{% if resp %}
variable = '{{ resp }}';
{% else %}
variable = 'null';
{% endif %}
socket.emit( 'My_Event' , variable );
// ...
</script>