我试图使用烧瓶 - socketio。我从文档中运行了一个简单的例子,它运行良好。我正在使用虚拟环境
from flask import Flask, render_template
from flask_socketio import SocketIO
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)
@socketio.on('message')
def handle_message(message):
print('received message: ' + message)
if __name__ == '__main__':
socketio.run(app, port=8000)
并在demo.py
我使用socketio客户端库
from socketIO_client import SocketIO, LoggingNamespace
def on_message_response(*args):
print('on_message_response', args)
with SocketIO('localhost', 8000, LoggingNamespace) as socketIO:
socketIO.emit('message', 'xxx', on_message_response)
socketIO.wait_for_callbacks(seconds=1)
我已安装eventlet
,这个基本示例运行正常。当我跑步时,我得到了输出结果received message: xxx
当我将app.py
文件和demo.py
更新为此
from flask import Flask, render_template
from flask_socketio import SocketIO
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)
@socketio.on('message')
def handle_message(name, age):
print('We Welcome {} who is {} years old'.format(name,age))
if __name__ == '__main__':
socketio.run(app, port=8000)
from socketIO_client import SocketIO, LoggingNamespace
def on_message_response(*args):
print('on_message_response', args)
with SocketIO('localhost', 8000, LoggingNamespace) as socketIO:
socketIO.emit('message', {'name':'Dipanshu', 'age':25}, on_message_response)
socketIO.wait_for_callbacks(seconds=1)
似乎app.py没有重新加载或正在更新,因为我一直得到这个
文件" app.py",第10行,在handle_message中 打印('收到消息:' +消息)TypeError:必须是str,而不是dict
我已经重启了app.py
几次,但我得到了同样的错误。我还尝试卸载eventlet
并使用Flask服务器像其他Flask应用程序一样运行它,但它仍然是相同的。
答案 0 :(得分:0)
这可能是编译的Python文件的问题。我想给你一些尝试的想法:
我的第一个建议是删除主应用程序目录或任何子目录中的所有*.pyc
个文件和__pycache__
目录。这将删除所有已编译的Python文件,并将强制Python重新编译所有内容。
或者,您也可以获取两个源文件并将它们移动到一个全新的目录,然后从新目录运行您的服务器和客户端。这也应该清除由于编译的Python文件的缓存引起的任何问题。
希望这有帮助!