我一直在和flask socketio玩,但没能让它发挥作用
我的项目目录设置如下:
Project
├── app
│ └── main
│ │ └── __init__.py
│ │ └── events.py
│ │ └── portal
│ │ └── __init__.py
│ │ └── routes.py
│ └── templates
│ | └── index.html
│ └── __init__.py
└── run.py
└── __init__.py
我的run.py
文件:
from app import create_app, socketio
app = create_app()
if __name__ == "__main__":
socketio.run(app, debug=True)
app\__init__.py
文件
from flask import Flask
from app.main.admin.routes import admin
from app.main.api.routes import api
from app.main.website.routes import website
from app.main.portal.routes import portal
import os
from flask_socketio import SocketIO
socketio = SocketIO()
def create_app():
app = Flask(__name__)
app.secret_key = os.urandom(24)
# Initialise extensions
socketio.init_app(app)
with app.app_context():
app.register_blueprint(website)
app.register_blueprint(portal, url_prefix="/portal")
return app
events.py
:
from .. import socketio
@socketio.on('hello')
def handle_hello(data):
print(data)
最后{
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript" src="//code.jquery.com/jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/socket.io/1.3.6/socket.io.min.js"></script>
<script>
var socket = io.connect('http://' + document.domain + ':' + location.port);
function hey() {
socket.emit('hello', {'data': 'hello peter r'});
}
</script>
</head>
<body>
<button onclick="hey()">Hello</button>
</body>
在events.py中,似乎从未收到事件hello,并且没有打印任何内容。我假设导入文件的方式有问题,但代码中没有任何问题。有人能帮忙吗
更新:我在alert.html(客户端)代码中添加了一个socket.on('connect')
事件,客户端正在连接,但服务器(events.py)不会收到任何东西
问题是你的应用程序从未访问过你的
events.py
文件。它不是以任何方式导入或打开的。因此,处理程序从未注册我们缺少一些代码,所以我只做了一个简单的工作示例。只需将所有这些文件放在同一个文件夹中:
相关问题 更多 >
编程相关推荐