如何使用python从套接字客户端返回flask服务器端的json对象?

时间:2019-07-28 22:18:35

标签: python flask socket.io flask-socketio

在我的客户端上,我有dataJson,我想通过socketio将其发送到服务器。在服务器端,我希望此dataJson可以在app.route下接收并返回,以便在网络上显示。

服务器端代码:

from flask import Flask, render_template
from flask_socketio import SocketIO

app = Flask(__name__)
app.config['SECRET_KEY'] = 'vnkdjnfjknfl1232#'
socketio = SocketIO(app)

@app.route('/')
def sessions():
    print(dataJson)
    return dataJson

@socketio.on('my event')
def handle_my_custom_event(json):
    global dataJson
    dataJson = json
    print('received json: ' + str(json))

if __name__ == '__main__':
   socketio.run(app, debug=True, host='127.0.0.1')

客户端代码:

from socketIO_client import SocketIO

import json
dataJson = {'xxx': 'yyy'}
with SocketIO('localhost', 5000) as socketIO:
    json = json.dumps(dataJson)
    socketIO.emit(json)
    print(json)

还是有其他方法可以实现我的目标? 谢谢!

1 个答案:

答案 0 :(得分:0)

不确定这是否是代码的唯一问题,但是客户端emit调用缺少事件名称。应该是这样的:

socketIO.emit('my event', json)

还要注意,您正在使用名为json的变量,该变量将遮盖json包。将其更改为其他名称,以避免难以捕获的错误。

最后,我可能建议您使用python-socketio包中的Socket.IO客户端,而不要使用您使用的客户端。 python-socketio软件包包括服务器和客户端。服务器是您作为Flask-SocketIO扩展的一部分使用的服务器,因此您将使用由同一个人(即我,所以我有偏见)编写的服务器和客户端。