问题标签 [python-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 投票
2 回答
1925 浏览

python-3.x - python socket_io.emit() 从函数调用

我正在使用 aiohttp 和 python 构建一个网络服务器应用程序。对于数据交换,我使用的是socketio python 实现。为了从我的前端获取数据到我的 python 脚本,一切都按预期工作。现在我想从我的 python 脚本中发送一些数据以在浏览器中显示它。出于这个原因,我想实现一个发出给定数据的函数。

当我尝试socket_io.emit('data',"test")直接调用时,我收到运行时警告:

RuntimeWarning:协程 'AsyncServer.emit' 从未等待 > my_server.socket_io.emit('data', "test") RuntimeWarning:启用 tracemalloc 以获取对象分配回溯

我已经做了一些研究,我认为这很正常。

当我像这样创建异步函数定义时:

没有消息发出


这是我的python测试代码:

并且使用的“公共”HTML文件:

如何创建一个在调用时发出给定数据的函数?

编辑:

用于从另一个线程调用 emit 函数的新 python 脚本:

重现步骤:

  1. 启动服务器,没有连接客户端:
  1. 通过浏览器连接
0 投票
2 回答
2170 浏览

python - 如何将自签名证书添加到 PyCharm?

在运行 python-socketio 客户端和 flask-socketio 服务器时,我需要 PyCharm(2019.1.1,在 macOS Mojave 上)接受我的自签名 SSL 证书。

我试图通过 .将自签名证书添加到 PyCharm Preferences/Tools/Server Certificates。但是,它并不能解决问题。当 python-socketio 客户端尝试连接到 flask-socketio 服务器时,它给了我错误。

在客户端,错误是这样抛出的:

这是服务器端的错误日志:

所以我的问题是,如何在 macOS 上将自签名证书添加到 PyCharm 并让 Python 找到它?

请给我一些想法。

0 投票
1 回答
814 浏览

python - 如何使用 python 的 socketio 发送 css/javascirpt 文件和 HTML?

我有一个始终离线的 python 套接字服务器,我需要为本地客户端提供一个 HTML 页面,并来回通信。但是,当离线运行它时,它无法获取我们正在使用的远程 javascript/css,这很好,我们只是下载了文件和所需的许可证,并让 html 在本地引用它们。

这种方法仅在运行 .html 文件时有效,但是当 .html 文件由套接字服务器提供时,它缺少 .html 所指的 javascript 和 html。

我们将 .html 文件发送给客户端,如下所示:

我们假设,因为服务器只发送 .html 文件,我们没有看到本地 js/css 被正确加载。我们想知道是否有办法将这些文件与 .html 文件一起发送,以便我们可以正确显示页面。

0 投票
1 回答
5417 浏览

python - Python socket.io 客户端事件

我正在使用这个Python socket.io 客户端库。这是用于实例化和连接到套接字 io 服务器的 python 代码的一部分:

记录器消息“已创建 socketio 客户端”已打印出来,但未显示“已连接到服务器”消息。但是,在手动关闭服务器连接期间,“断开”回调被激活......这里出了什么问题?我在这里使用 nginx 代理,仅供参考。

0 投票
0 回答
601 浏览

python - Python SocketIO-client 不接收来自 nodeJS 服务器的发射

所以这就是我想要做的,我希望能够在浏览器中向 python 脚本发送消息。我已经到了可以在浏览器中发送消息并且服务器可以看到它的地步。出于测试目的,我曾经io.emit('input', data)将数据发送到我的 python 脚本,但 python 端没有任何反应。

脚本.py:

server.js:

有什么我没有看到或者这不可能吗?提前致谢!

0 投票
1 回答
826 浏览

python - 从队列中获取结果以正确发送到 socket.io

我需要在一个线程中启动服务器,在另一个线程中启动值生产者(此处由 模拟mock_producer),并且服务器的后台线程应该从队列中获取每个值并将其发送给客户端。同时,WSGI 服务器应该index.html在请求时提供服务。这是迄今为止最好的尝试:

附带玩具index.html

让我烦恼的是sio.sleep(0.1)线路。这显然会在放入队列的对象和提供给客户端的对象之间引入延迟(无论多么小)。但这不起作用:

原因是queue.get()块,它不允许 WSGI 服务器为index.html页面提供服务(这显然发生在同一个线程上)。

当我尝试为 queue.get-emit 循环启动一个新线程时(例如,使用Thread(target=background).start()而不是sio.start_background_task(background)),调试输出声称正在发生发射,但没有任何东西到达客户端,所以这也是一个失败。

理想情况下,我希望代码处于空闲状态,直到需要处理请求或队列有值,并立即对任何一个做出反应。

有没有办法干净地写这个?

注意:不幸的是,由于关键的依赖关系,这个项目停留在 Python 2 中。我相信唯一的后果就是这import Queue from Queue条线,但以防万一。

0 投票
0 回答
77 浏览

django - 使用 makemigrations 命令不会发生 Django 2.1.5 迁移

在我们的 Django 项目(Django 2.1.5)中,每次我们尝试运行项目时,除了 runserver 命令之外,我们还必须给出“--noreload”命令,否则项目会返回错误,

ValueError:信号仅在主线程中有效

我们正在使用 Django 信号在 Django 中创建的应用程序和 Threading aysnc-mode 中的 Web-sockets 之间进行通信,以连接项目中涉及的其他服务。当我们尝试在 Jenkins 中部署项目时,这成为一个问题,我们使用 Nginx 作为托管应用程序的网络服务器。是否有可能解决“--noreload”问题并正常运行应用程序?

我们不确定是不是因为上面提到的同样的问题,但是我们在尝试迁移 Django 中的模型中的更改时遇到问题,它总是返回

未检测到更改

在快速互联网搜索后,我们通过提及应用程序名称进行了迁移,它确实有效,但终端在迁移后保持静止并等待手动终止进程。

有没有可能的解决方案来克服这个问题?我们也想知道我们哪里出错了

0 投票
0 回答
301 浏览

python - 取消任务时异步锁死锁

我最近使用带有 aiohttp 的 python-socketio 编写了一个客户端/服务器应用程序,我的应用程序基于异步命名空间(服务器端),另外我的 on_message 事件中有许多等待调用,因此我必须使用异步锁来确保我保持我想要的流量。为了实现这种行为,我编写了一个装饰器并用它包装了每个临界区类型的函数。

在我的构造函数中,我已经初始化_async_mutex = asyncio.Lock()

装饰师:

现在,在任何正常使用情况下,一切都可以正常工作(关闭/打开客户端会正确触发功能并且锁按预期执行)。重要的是要注意我的 on_disconnect 函数是用完全相同的装饰器和锁包装的。我遇到的问题是当客户端的网络适配器物理断开连接时(正常的客户端关闭工作正常),我看到我的 on_disconnect 事件确实被调用了,但另一个协程当前正在持有锁。由于某种原因,该事件被多次触发并最终陷入僵局。

我已经用描述锁的状态/调用函数的打印包装了我的装饰器,并且还在每个异步调用周围添加了一个 try/catch。似乎我所有的协同程序都捕获了一个取消的异常(我推测是 aiohttp),因此一个“持有”锁的方法被取消并且锁永远不会被释放。我尝试用 asyncio.shield() 包装每个异步调用,但行为没有改变。

我应该在这里采用不同的异步锁方法吗?(移除锁完全可以解决问题,但可能会导致应用程序的计算部分出现未定义的行为)

更多代码示例:实际的 on_connect 和 on_disconnect 事件:

注意:另一个没有相同的客户端连接到它。此外,当发生网络断开连接时,我也看不到日志消息(我已将日志级别设置为调试)

0 投票
1 回答
486 浏览

python - socketio 发出事件的问题-python 2.7 客户端到 nodejs 服务器

我在留言板上查看了很多类似的问题并阅读了相关文档,据我所知,我似乎做的一切都是正确的。

节点服务器代码

python客户端代码

日志文件和终端输出

当我启动 python 脚本时,我可以看到套接字连接有效,但是事件“pythonTest”有问题。事件“userConnect”的行为应如此,但“userConnect”的发射器来自网络浏览器,这让我相信问题出在 python 方面,而不是节点中的事件处理程序。我认为 socket.emit('pythonTest', 'pythonTest') 特别有问题,但我不知道它可能是什么。

0 投票
1 回答
207 浏览

django - Daphne 服务器无法处理 http 请求

我有一个想要使用 daphne 部署的 django 应用程序。

Django 应用程序同时支持websocketshttp请求。我已经将 django 转换为支持 ASGI。

我正在使用以下方式启动服务器:

服务器能够接受websocket连接,但无法处理传入的HTTP请求(抛出 404)。

我在这里哪里错了?

PS:我没有使用 django 频道。