问题标签 [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 回答
6091 浏览

python - 如何使用 websockets 通过 Flask 向特定用户发送消息?

在我正在使用Flask构建的网站中,人们可以互相发送 PM。当用户收到 pm 时,我现在想实现一个类似于 StackOverflow 的通知。由于 SO 使用 websockets 实现了这一点,因此我使用本教程开始使用 websockets关于实现Flask-socketIO(与Socket.io一起使用)。

我下载了教程制作的示例,并且我了解其中的代码。然而,我不明白的是:

  1. 我如何知道登录的人是否打开了网站并连接到 websockets?
  2. 如何向该特定用户发送消息?

因此,假设我有一个简单的路线,人们可以在其中向另一个用户发布 PM:

我的评论已经说过:我如何向从那里发送此消息的用户发出消息?欢迎所有提示!

[编辑] 按照 Miguel 的提示,我想创建一个名称为 的房间user.id,所以我现在创建了以下连接和断开连接事件:

但是在连接后,我得到了下面的堆栈跟踪。对象不是g用socketio路由创建的吗?

0 投票
1 回答
2893 浏览

python - 如何使用 Flask、Flask-SocketIO 和 nginx 实现 SSL(http 到 https)

我的应用程序使用 Flask-Socketio、Flask 和 nginx。我在一篇文章中读到,所有 HTTP 到 HTTPS 的处理都必须在 Web 服务器级别而不是在应用程序服务器级别完成。我使用该rewrite属性将所有 HTTP 请求重定向为 HTTPS 请求。这适用于静态页面。但是,当我尝试加载动态内容时,我收到一条错误消息,指出The page at 'https://localhost/myLoc' was loaded over HTTPS, but displayed insecure content from 'http://localhost/myLoc/more/paths?t=1390397': this content should also be loaded over HTTPS..

此外,我也收到此错误XMLHttpRequest cannot load http://localhost/myLoc/more/paths?t=1390397. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://localhost' is therefore not allowed access.

我的 nginx.conf 文件看起来像这样

请帮忙。Flask-SocketIO 是否还必须包含证书和密钥的路径?

0 投票
1 回答
2271 浏览

python - 将控制台日志输出重定向到 flask-socketio

我通过 Pythonlogging模块将事件记录到控制台。我还想通过 socket-io (flask) 将该日志消息发送到客户端。以下方法仅部分成功。

我在浏览器中得到结果,但仍然得到

对于控制台上的每个发送调用。我认为发送调用的上下文不可用......处理该问题的有用方法是什么?谢谢。

0 投票
0 回答
394 浏览

python - 我怎样才能让一个烧瓶应用程序同时可供一个客户使用

我想制作一个只能由一个客户端同时编辑的 webapp。我使用烧瓶和烧瓶socketio。授权客户端离开后(socketio 中的断开连接事件),下一个应该能够编辑内容。现在我对 websockets 有多次调用,而 http 不仅仅是一个 websocket。因为我也有简单的 html 表单,所以我也必须阻止传入的请求。

我可以从 socketio 事件中的请求对象获取 IP。

这对我来说似乎是一个糟糕的方法......

0 投票
1 回答
2745 浏览

python - Flask-Socketio:命名空间 keyerror.,获取已连接客户端的列表

我在运行 Flask 的服务器上使用 Flask-Socketio,我的客户端运行 javascript。我所有的客户端都使用 namespace 连接到服务器'/test'。在客户端执行某个操作后,我希望客户端触发服务器上的一个函数,该函数遍历所有连接的客户端。我正在使用以下代码段来遍历连接的客户端列表:

每个连接都有一个在连接时分配给它的“id”键。

但是,有时服务器会给出以下错误,表明未找到命名空间键:

我不明白为什么会出现此错误,因为我所有连接到服务器的套接字都连接在同一个命名空间上。此外,仅在一小部分函数调用期间会遇到此错误。为什么这个错误不一致?

有没有更好的方法可以遍历连接的客户端列表?

0 投票
2 回答
10926 浏览

python - Socket.io 与 flask-socketio python。如何设置套接字保持活动/超时

我正在努力寻找有关 socket.io 超时值的任何文档。我在客户端使用 //cdnjs.cloudflare.com/ajax/libs/socket.io/0.9.16/socket.io.min.js 在服务器端使用 Flask-SocketIO。

这是我创建套接字的方式:

问题是,如果服务器甚至一分钟都没有向客户端或visaversa 发送任何内容,客户端就会断开连接,如果服务器尝试向客户端发出另一个信号,它会失败,因为客户端已经断开连接。如何让客户端保持连接?

谢谢!

0 投票
1 回答
886 浏览

websocket - 如果另一个事件处理程序进程未完成,Flask-soketio 应用程序不会处理来自客户端的新发出事件

我想使用flask,flask-socketio来实现一个在浏览器上接受“命令字符串”(如:ping 8.8.8.8)的应用程序,然后服务器执行它并将命令的输出实时返回给浏览器。

我的实现如下。

客户端向服务器发出 'exec_event' 事件,服务器运行命令并在命令生成新输出时不断向客户端发出 'exec_response' 事件。

如果要终止命令,客户端还可以向服务器发送“ctrlc_event”。

我遇到的问题是:

服务器在处理前一个“exec_event”时无法处理“ctrlc_event”。如果我直接杀死服务器上的“ping 8.8.8.8”等长时间运行的命令,则服务器开始处理“ctrlc_event”。

谁能指出我的原因或给我一些方向?

服务器端代码

客户端代码是

0 投票
1 回答
7847 浏览

python - RuntimeError:在请求上下文之外工作

我正在尝试创建一个“keepalive”websocket 线程,以便在有人连接到页面后每 10 秒向浏览器发送一次发射,但是我遇到了一个错误并且不知道如何解决它。

关于如何使这项工作的任何想法?

一旦发送“断开连接”,我将如何杀死该线程?

谢谢!

0 投票
1 回答
402 浏览

flask - 使用 flask-socketio 和 flask-login 进行身份验证的问题

我正在使用 Flask-Login 来管理我的应用程序上的用户,并且我还让用户在登录时加入房间。

登录完成后,前端会发出一条消息,让用户加入房间。

问题是这个 login_required 永远不会被验证。我因未经授权而失败。即使用户刚刚登录。当我删除 @login_required 并在其中放入 print(current_user) 时,我得到了匿名用户 mixin。

我尝试了一堆疯狂的东西,但似乎没有任何效果,有什么想法吗?

0 投票
1 回答
1343 浏览

python - 从烧瓶的 socketio 获取用户代理信息

是否可以从烧瓶中的 socketio 获取用户代理信息?我猜想在握手期间将用户相关信息发送到套接字服务器。

如果不可能,我将要求客户手动发送此信息。