问题标签 [flask-socketio]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Flask-SocketIO 在 Apache/WSGI 上不起作用
我使用了来自http://blog.miguelgrinberg.com/post/easy-websockets-with-flask-and-gevent/page/4的以下示例代码,当我使用测试服务器运行它时它工作正常,例如python myapp.py
我可以连接到它并发送消息
问题是当我将相同的代码移动到使用 Apache 为 Flask 提供服务的服务器时,我得到了错误。
Apache 主机的配置文件是:
是否可以运行 SocketIO/Flask 并通过 Apache 运行?
python - 如何从 websocket 端点外部发出 websocket 消息?
我正在使用Flask构建一个网站,其中我还使用Flask-socketIO使用 Websockets ,但有一件事我不明白。
我建立了一个聊天功能。当一个用户发送消息时,我使用 websockets 将该消息发送到服务器,之后我从同一个调用中将消息发送给另一个用户:
但是假设我想在保存文件时向用户发出消息。这意味着我需要从发布文件的视图中发出一条消息。所以根据flask_socketio docs我可以在发射中添加一个命名空间。所以我写了这个:
但是看到下面的堆栈跟踪,命名空间仍然存在问题;werkzeug 有一个AttributeError: 'Request' object has no attribute 'namespace'
.
有人知道我在这里做错了什么吗?或者这是flask_socketio中的一个错误?欢迎所有提示!
python - 使用套接字时的 Flask 调试模式
我正在构建使用套接字(flask socketio)的python Flask应用程序。基本上,客户端会向服务器发送一些他想要执行的命令。服务器将执行命令并将套接字发送到客户端命令输出。
有处理函数接收来自用户的请求。该函数将执行命令并将大量套接字发送回客户端。抓取标准输出和标准错误线程也被使用。
如果烧瓶应用程序处于调试模式,则函数内部发出的套接字将在函数结束之前到达客户端(这是可取的)。但是如果调试关闭,所有套接字都会以某种方式排队并在函数结束后发送。服务器没有实时响应,只是
单击执行->等一下->这是您的输出
代替:
单击执行->这里有一点输出->这里有另一行-> ...
我已阅读 Flask 文档,但调试说明如下:
如果您启用调试支持,服务器将在代码更改时自行重新加载,如果出现问题,它还会为您提供有用的调试器
有什么方法可以告诉 Flask 立即发送所有内容,或者有一些想法如何解决这个问题?它可能与flask的flask-socketio插件有关
非常感谢您的反馈:)
flask - 将 flask-migrate 与 flask-script、flask-socketio 和应用程序工厂一起使用
我正在使用应用程序工厂方法创建一个烧瓶应用程序,但是在将 Flask-Migrate 与 socketio 和 flask-script 一起使用时遇到问题。
问题是我将我的create_app
函数传递给了,Manager
但我也需要传递app
给我socketio.run()
的。现在我似乎看不到解决方案。有什么办法可以将这两种解决方案结合起来吗?
管理.py:
当我使用带有 socketio 的旧方法,但没有烧瓶迁移时,一切正常。如果我使用新方法并删除 socketio 部分,则迁移工作。
注意:我希望能够使用以下两个命令调用我的应用程序。
python manage.py run
python manage.py -t True db upgrade
编辑:
试图使用current_app
我得到RuntimeError: working outside of application context
python - 如何在 localhost (xampp) 上运行烧瓶 socket.io
我看到的教程使用以下代码来运行服务器:
我的__init__.py
文件是:
我的views.py
文件包含所有@app.route
和@socketio
装饰器。
我的问题是,我应该在哪里放置代码:
当我把它放在__init__.py_
文件中时,我收到错误:
flask - threading=True 与 flask-socketio
我一直在使用烧瓶,我的一些路由处理程序开始计算可能需要几分钟才能完成。使用烧瓶的开发服务器,我可以使用 app.run(threaded=True) 并且我的服务器将在执行这些多分钟计算时继续响应其他请求。
现在我开始使用 Flask-SocketIO,但我不确定如何做同样的事情。我知道我可以在 python 开始其中一个计算时显式地在 python 中生成一个单独的线程。这是唯一的方法吗?或者对于flask-socketio,是否有相当于线程=真的东西。(或者,更有可能,我只是完全糊涂了。)
谢谢你的帮助。
python - Flask SocketIO 的正确配置
我一直在关注本教程以尝试使用 and开始Flask SocketIO
运行。nginx
gunicorn
nginx
gunicorn_config.py
在Supervisor
我调用我的应用程序时:
使用此配置,我的应用程序(不使用Flask SocketIO
)可以正常工作。
我只是对如何使用感到困惑socketIO
。如果我转到地址http://localhost:8000/socket.io,我会得到响应Internal Server Error
。
该示例HTML/Javascript
(https://github.com/miguelgrinberg/Flask-SocketIO/blob/master/example/templates/index.html)包含以下行:
我有两个问题:
1)这个变量应该指向什么地址?
2) 我的配置 ( nginx
, gunicorn
) 是否正确?
对不起,如果这个问题很愚蠢。我只是对这一切应该如何工作感到困惑。
谢谢你的帮助。
**更新**
这是nginx
error.log
我尝试访问http://localhost/socket.io时文件的输出。
不确定这有多大帮助,但我不知道在哪里可以找到额外的信息。
我也很好奇为什么我可以访问这个:http://localhost/socket.io123abc
并且仍然得到一个Internal Server Error
与错误相反的Not Found
错误?
我还supervisord.conf
根据以下Miguel's
答案更新了我的文件:
supervisord.conf
/var/log/gunicorn/couponmonk-err.log
这个列表持续了一段时间..
python - Flask SocketIO 将消息从服务器发送到房间
在我的app
中,我需要client
加入一个room
,以便它可以receive
从我的server
.
服务器代码
客户代码
webpage
加载后,我进入了"venue_1"
有webpage form
资格的"join"
.
侧面的也设置variable
room
为。server
"venue_1"
问题是,当我调用 时API
/scan/user/...
,我的client
. 然而,
确实显示正确。
python - Flask SocketIO 通过发送令牌对连接事件进行身份验证
目前在user
登录后,我返回一个token
using JSON
。随后,他们必须向index
页面发出请求并token
在HTTP Authorisation header
.
该index.html
页面包含以下内容:
如果user
遵循这个事件过程,那么socket
只有在它们之后才有可能连接到login
。但是,我试图防止有人可能只是创建一个html
包含上述代码的文件而不首先执行该login
步骤的情况。
服务器代码
有没有办法可以将 a 传递token
给上述connect
事件,以便在那里验证用户。如果token
最终无效,我可能会disconnect
打电话。
或者当我进行以下调用时是否需要发生这种情况?
谢谢你的帮助。
javascript - 使用 Flask 提供静态资源 - 违反同源策略
我在为我在Phaser中开发的一个小游戏提供静态文件(图像资产等)时遇到问题。我在服务器上使用flask-socketio(在客户端使用socket.io)进行网络,这就是为什么我试图让它在Flask下工作。据我所知,我必须使用 Flask 来提供静态资源,否则我会遇到Same-origin policy的问题。
事实上,我尝试在不同的端口上使用 nginx 提供资产,但我在浏览器控制台(本例中为 Safari)中收到了这条消息:SecurityError: DOM Exception 18: An attempt was made to break through the security policy of the user agent.
我查看了关于如何提供静态文件的 Flask 文档,它说要使用“<em>url_for”。但是,这只适用于 HTML 模板文件。我正在尝试使用 Phaser 引擎在我的 javascript 代码中加载静态资源,如下所示(仅作为示例):
我显然不能使用 '<em>url_for' 因为它不是模板文件而是 javascript 代码。
所以我的问题是,如何为我的静态资源提供服务,以免违反同源策略?
- 除了使用 '<em>url_for' 之外,还有另一种在 Flask 中提供静态资源的安全方法吗?
- 或者我应该使用 nginx 作为反向代理?在 flask-socketio 文档中,我找到了这个 nginx 配置片段:Flask-SocketIO 文档(请向下滚动到上面写着“使用 nginx 作为 WebSocket 反向代理”的位置)
关于#2,我不太明白它应该如何工作。如果我应该做#2,如果Flask正在监听端口5000,有人可以解释我应该如何配置nginx吗?我在该片段中的哪个位置配置文件系统上静态资产的路径?在我的 javascript 代码中,我使用什么 url 路径来引用资产?