问题标签 [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.

0 投票
1 回答
5215 浏览

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 运行?

0 投票
1 回答
5370 浏览

python - 如何从 websocket 端点外部发出 websocket 消息?

我正在使用Flask构建一个网站,其中我还使用Flask-socketIO使用 Websockets ,但有一件事我不明白。

我建立了一个聊天功能。当一个用户发送消息时,我使用 websockets 将该消息发送到服务器,之后我从同一个调用中将消息发送给另一个用户:

但是假设我想在保存文件时向用户发出消息。这意味着我需要从发布文件的视图中发出一条消息。所以根据flask_socketio docs我可以在发射中添加一个命名空间。所以我写了这个:

但是看到下面的堆栈跟踪,命名空间仍然存在问题;werkzeug 有一个AttributeError: 'Request' object has no attribute 'namespace'.

有人知道我在这里做错了什么吗?或者这是flask_socketio中的一个错误?欢迎所有提示!

0 投票
1 回答
3176 浏览

python - 使用套接字时的 Flask 调试模式

我正在构建使用套接字(flask socketio)的python Flask应用程序。基本上,客户端会向服务器发送一些他想要执行的命令。服务器将执行命令并将套接字发送到客户端命令输出。

有处理函数接收来自用户的请求。该函数将执行命令并将大量套接字发送回客户端。抓取标准输出和标准错误线程也被使用。

如果烧瓶应用程序处于调试模式,则函数内部发出的套接字将在函数结束之前到达客户端(这是可取的)。但是如果调试关闭,所有套接字都会以某种方式排队并在函数结束后发送。服务器没有实时响应,只是

单击执行->等一下->这是您的输出

代替:

单击执行->这里有一点输出->这里有另一行-> ...

我已阅读 Flask 文档,但调试说明如下

如果您启用调试支持,服务器将在代码更改时自行重新加载,如果出现问题,它还会为您提供有用的调试器

有什么方法可以告诉 Flask 立即发送所有内容,或者有一些想法如何解决这个问题?它可能与flask的flask-socketio插件有关

非常感谢您的反馈:)

0 投票
1 回答
1700 浏览

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

0 投票
2 回答
1761 浏览

python - 如何在 localhost (xampp) 上运行烧瓶 socket.io

我看到的教程使用以下代码来运行服务器:

我的__init__.py文件是:

我的views.py文件包含所有@app.route@socketio装饰器。

我的问题是,我应该在哪里放置代码:

当我把它放在__init__.py_文件中时,我收到错误:

0 投票
1 回答
6246 浏览

flask - threading=True 与 flask-socketio

我一直在使用烧瓶,我的一些路由处理程序开始计算可能需要几分钟才能完成。使用烧瓶的开发服务器,我可以使用 app.run(threaded=True) 并且我的服务器将在执行这些多分钟计算时继续响应其他请求。

现在我开始使用 Flask-SocketIO,但我不确定如何做同样的事情。我知道我可以在 python 开始其中一个计算时显式地在 python 中生成一个单独的线程。这是唯一的方法吗?或者对于flask-socketio,是否有相当于线程=真的东西。(或者,更有可能,我只是完全糊涂了。)

谢谢你的帮助。

0 投票
3 回答
8623 浏览

python - Flask SocketIO 的正确配置

我一直在关注本教程以尝试使用 and开始Flask SocketIO运行。nginxgunicorn

nginx

gunicorn_config.py

Supervisor我调用我的应用程序时:

使用此配置,我的应用程序(不使用Flask SocketIO)可以正常工作。

我只是对如何使用感到困惑socketIO。如果我转到地址http://localhost:8000/socket.io,我会得到响应Internal Server Error

该示例HTML/Javascripthttps://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

这个列表持续了一段时间..

0 投票
1 回答
5287 浏览

python - Flask SocketIO 将消息从服​​务器发送到房间

在我的app中,我需要client加入一个room,以便它可以receive从我的server.

服务器代码

客户代码

webpage加载后,我进入了"venue_1"webpage form资格的"join".

侧面的也设置variable room为。server"venue_1"

问题是,当我调用 时API /scan/user/...,我的client. 然而,

确实显示正确。

0 投票
1 回答
8797 浏览

python - Flask SocketIO 通过发送令牌对连接事件进行身份验证

目前在user登录后,我返回一个tokenusing JSON。随后,他们必须向index页面发出请求并tokenHTTP Authorisation header.

index.html页面包含以下内容:

如果user遵循这个事件过程,那么socket只有在它们之后才有可能连接到login。但是,我试图防止有人可能只是创建一个html包含上述代码的文件而不首先执行该login步骤的情况。

服务器代码

有没有办法可以将 a 传递token给上述connect事件,以便在那里验证用户。如果token最终无效,我可能会disconnect打电话。

或者当我进行以下调用时是否需要发生这种情况?

谢谢你的帮助。

0 投票
1 回答
415 浏览

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 代码。

所以我的问题是,如何为我的静态资源提供服务,以免违反同源策略?

  1. 除了使用 '<em>url_for' 之外,还有另一种在 Flask 中提供静态资源的安全方法吗?
  2. 或者我应该使用 nginx 作为反向代理?在 flask-socketio 文档中,我找到了这个 nginx 配置片段:Flask-SocketIO 文档(请向下滚动到上面写着“使用 nginx 作为 WebSocket 反向代理”的位置)

关于#2,我不太明白它应该如何工作。如果我应该做#2,如果Flask正在监听端口5000,有人可以解释我应该如何配置nginx吗?我在该片段中的哪个位置配置文件系统上静态资产的路径?在我的 javascript 代码中,我使用什么 url 路径来引用资产?