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

python - 将 flask_socketio 合并到我自己的烧瓶项目中

我开发了我的宁静 api 烧瓶项目(我们称之为“MYOWN”)。

然后,由于一些需要实现'通知','聊天'等功能,我尝试将我的项目与简单的socketIO示例项目合并。

我想只用下面的一个命令来运行我的项目

在'MYOWN's manage.py 脚本中,存在

这让我对“我在哪里插入脚本到'MYOWN'?”感到困惑。

有什么方法可以同时运行 'MYOWN' 和socketIO 示例项目

0 投票
1 回答
951 浏览

python - 串行通信、Flask-SocketIO 和 Python 多线程

我的问题与让 Arduino Uno 通过套接字将数据通信到另一个客户端应用程序有关。[与 Jeopardy!-esque 游戏前端通信的蜂鸣器系统] 目标是发出“锁定”事件。

目前,Arduino 运行在自己的线程上,Flask-SocketIO 服务器作为主进程运行。所有代码都有效,包括打印语句“Emitting Socket”,除了之后发出套接字数据的行。

我觉得这只是一个多线程问题,但我对多线程的经验很少。

建议?

0 投票
2 回答
1169 浏览

flask - 使用 eventlet 和 Redis 进行 Flask socketio 调试会产生额外的绿色线程?

我正在尝试组合一个简单的 Flask / socketio / eventlet 服务器来订阅 Redis 事件。我看到的行为是,启用 Flask 调试后,每次 Werkzeug 检测到更改并重新启动 socketio 时,我的另一个 redis 侦听器也会启动(除了旧的侦听器不退出)。

这是一个删除了所有 socketio 处理程序的工作版本:

加入一些手动 redis-cli 发布 (PUBLISH msg himom) 这将产生以下输出:

为什么 Redis 监听器启动多次?如果我进行更改并保存它们,Werkzeug 每次都会启动另一个。我该如何正确处理?

以下是涉及的软件包及其版本的列表:

  • Python 2.7.6
  • 烧瓶 0.10.1
  • Werkzeug 0.11.4
  • 小事件 0.18.4
  • 格林莱特 0.4.9
  • Flask-Redis 0.1.0
  • Flask-SocketIO 2.2

** 更新 ** 我现在有一个部分解决方案。上面的一切都保持不变,除了池行为已移至 Flask 的“before_first_request”函数中:

剩下的问题是 'before_first_request' 不处理存在现有 websocket 的情况,但这是一个单独的问题。

0 投票
0 回答
506 浏览

python - 建立 websocket 连接后,socketio 使用轮询连接。阻止通信

我一直在努力解决我的 websocket 连接的一个奇怪问题。我使用 socketio 1.4.5 连接到服务器(flask、flask-socketio、gunicorn、nginx)。

问题是在建立 websocket 连接,大约 8 次连接尝试中的 1 次 socketio 使用 xhr 轮询进行连接。不知何故,这会阻止此特定客户端的整个通信。当达到超时(在我的情况下为 60 秒)时,socketio 再次连接,如果下次没有 xhr-polling 阻塞,则通信再次启动。

这让我非常沮丧。而且我之前从未在具有相同设置的应用程序中看到此问题。

上面两行是在 chrome 中分析流量时网络选项卡上可用的内容。在达到超时之前,将 504 替换为“待处理”。

几个小时以来,我一直在努力寻找解决方案,但已经没有什么想法了。我希望有人可以帮助我解决这个问题..

0 投票
2 回答
874 浏览

angularjs - Angular 单页应用程序和 socketio 多个套接字

我还没有找到关于这个主题的解决方案或任何信息。基本上我正在开发一个带有flask、socketio和angularjs的聊天应用程序。我使用 angularjs 创建了一个单页应用程序,因此当我单击例如注册按钮时,即使它实际上并没有路由到新页面,也会看到该页面。问题是当我单击注册按钮或切换视图时,会创建另一个套接字连接。因此,当我返回聊天应用程序视图发送消息时,它会发送 3 条消息,因为创建了 3 个套接字。一个最初,一个当我去注册视图时,当我回到聊天应用程序视图时创建了第三个套接字连接。所以我对这种行为有几个问题:

在非 SPA 中,这种行为还会发生吗?

在非 SPA 中切换页面时,套接字是否会断开连接?

对于我的问题,我可以看到在 SPA 中更改视图会创建另一个套接字,但不会删除套接字。如何避免有多个套接字连接,这样我就不会为单个发送的消息事件发送多个消息/事件?

非常感谢你们。

0 投票
1 回答
4597 浏览

python - Flask-SocketIO eventlet 无法切换到不同的线程

我目前正在进行的项目使用 Flask-SocketIO 在我的 Raspberry Pi 和连接到它所服务的网站的客户端之间进行通信。但是,一旦我设置了一个或多个额外线程,就会发生错误。我使用猴子补丁来允许后台线程(这有效)。但是当我启动另一个来处理特定事件时,程序崩溃了。这些是当前的核心文件:

apps.py

main.py

other_module在其方法执行期间经常向所有客户端发出事件run(可能运行几分钟,但经常休眠),所以我认为它与此有关。该apps模块是单独定义的,以避免这种循环依赖。这是我在other_module执行其run方法时遇到的错误,仅此而已:

编辑:每当我尝试在不同的线程中使用我的 PiCamera 时,似乎都会发生错误。我已经尝试使用 安全地导入它eventlet.import_patched("picamera"),但没有任何成功。我应该回到async_mode="threading"?

0 投票
2 回答
1906 浏览

javascript - 如何访问使用 websockets 发送的烧瓶中的 formData?Flask-SocketIO

如何使用 Web 套接字访问发送到 Flask 的表单数据?我在谷歌浏览器开发者工具->控制台中收到无效的帧头。

从我的 javascript 代码中提取:

我将如何从 flask 访问 my_form 中的“title”字段?

request.form 抛出相同的错误“无效的帧头”

还有一个问题,使用 Web 套接字提交表单并完全替代 ajax 是否很好?

0 投票
0 回答
363 浏览

python - OSCserver 线程中的 Flask-socketio 发出函数

我正在创建一个 Flask-socketio 应用程序,我想在收到 OSC 消息时发送套接字,以便通过 socketio.js 将其接收到 Web 应用程序中

即使我没有收到错误消息,套接字也没有从 javascript 端接收,因为在另一个线程中调用了发出函数,并且与请求上下文存在冲突。

我根据其他一些stackoverflow票尝试了几件事:

在处理函数之前添加这一行

或者在回调中重新创建一个 socketio 实例

但是这些解决方案都不起作用,我需要将解决这个“上下文”问题集成到我的线程中。注意 :

在这个线程中工作得很好,并在 javascript 部分中收到

0 投票
1 回答
2349 浏览

python - 如何使用 socket.io 在 Flask 中连接多个客户端?

我想从 socket.io 客户端获取我的 Flask 服务器中的数据。我的设置是:

  1. Client1 在服务器上调用方法 request_data。
  2. 然后方法 request_data 在 Client2 上发出“client2”事件。

我的烧瓶服务器中有以下方法:

在应该接收数据的客户端上:

但我似乎无法建立与 client2 的连接。我在这里做错了什么?

0 投票
3 回答
3572 浏览

python - 使用 Flask-SocketIO 自定义握手数据

我有一个使用 Flask 的 Python 服务器,它有一个使用Flask-SocketIO的 websocket 连接。有一个类似的问题: Send custom data with handshakeData in socket.io? 这个想法是做同样的事情,但不是使用 Node,而是使用 Flask。我希望客户端在连接事件中发送一些数据,例如:

我无法获取该自定义数据,并且由于客户端的框架,我不能依赖 cookie。一个可行的解决方案是像往常一样拥有连接事件,然后在自定义事件中将该信息作为有效负载获取。但我们想要的是只需要做一个连接事件。谢谢!