问题标签 [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.
python - python-socketio vs Gevent-socketio
我正在选择一个 python 库来编写嵌入我网站的实时聊天功能页面。
我找到了两个基于 Socket.IO 的库,python-socketio
并且gevent-socketio
:
Socket.IO 实时服务器的 Python 实现。
Socket.IO 是一种类似于 WebSocket 的抽象,它支持浏览器和服务器之间的实时通信。gevent-socketio 是该协议的 Python 实现。
你看,两者都是 Socket.IO 的实现。
我想选择其中一个(或者如果有比他们更好的图书馆,我不知道)。
我的考虑点如下:
我的 python 后端项目是由 Django/Django-Rest-Framework 框架编写的。
我的项目很赶时间,想用更方便的lib,少写代码来实现我的需求。
我上网,gevent-socketio
实时聊天必须使用gevent python WSGI
服务器,我不确定这是否是我项目部署的限制。
谁能给我建议选择最适合我的图书馆?
python - 如果 python-socketio 是我项目的一部分,如何注册 wsgi
我正在阅读python-socketio 示例。
在它的wsgi.py
:
在views.py
:
我想知道,GitHub 示例显示使用此方法注册 wsgi 应用程序:
但是在我的项目中,它python-socketio
是它的一部分,我如何wsgi
在这种情况下注册?
我的意思是我想让python-socketio
应用程序成为我项目的一部分,作为app
项目中的一部分。但是不知道怎么配置wsgi
。
EDIT-01
我的项目wsgi.py
当前代码如下:
python - ssl.SSLZeroReturnError:TLS/SSL 连接已关闭 (EOF) (_ssl.c:661)
这是我的代码:
导入 ssl,套接字服务器 ='10.10.10.9'
端口 = 50443
袜子 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ssl_sock =ssl.wrap_socket(sock,ssl_version=ssl.PROTOCOL_SSLv3)
ssl_sock.connect((服务器,端口))
返回 ssl_sock
我收到以下错误:
文件“/home/ragav/trunk/lib/Ipdu.py”,第 35 行,在 open_socket 中
文件“/usr/local/lib/python2.7/ssl.py”,第 876 行,在连接中
_real_connect 中的文件“/usr/local/lib/python2.7/ssl.py”,第 867 行
do_handshake 中的文件“/usr/local/lib/python2.7/ssl.py”,第 840 行
ssl.SSLZeroReturnError:TLS/SSL 连接已关闭 (EOF) (_ssl.c:661)
nginx - 不能使用 nginx 作为 websocket 代理
这是我的 nginx 配置
基于此代码的应用程序
结果,我无法通过代码从客户端页面连接到 websocket
当我尝试include proxy_params;
在 nginx 配置中使用行时,我得到 2018/03/06 19:52:06 [emerg] 1#1: open() "/etc/nginx/proxy_params" failed (2: No such file or directory) in /etc/nginx/conf.d/default.conf:6
我错在哪里以及如何允许 nginx 检索 websocket 连接?
python - 如何让 SocketIO/aiohttp 每 X 秒打印一次屏幕
使用 aiohttp 创建的 SocketIO 服务器在从其 socketio 客户端zoo
接收消息时将一个新字符串附加到全局字典。addAnimal
是否也可以zoo
每 5 秒打印一次字典?我下面的当前代码似乎不是zoo
每 5 秒打印一次。
python - 跟踪烧瓶服务器上文件的下载时,python-socketio 并不总是发出
我正在使用 RESTful Web 服务的烧瓶服务器和 python-socketio 来实现服务器和客户端之间的双向通信,以跟踪后端的下载进度。
我获取在 server.py 文件中声明的变量 sio 并将其作为参数传递到一个新对象中,该对象将使用它向客户端发出某些关于它在服务器上下载文件的消息。
问题是当文件在 python 服务器中下载时,每次将 1% 的数据写入文件时,它都会向客户端发出一条消息。但它并不总是在每次下载/写入 1% 的数据到文件时向客户端发出。
它通常会报告进度到 18%,暂停一段时间,然后报告 40%,跳过 18% 到 40% 之间的排放。
有人可能会说它的互联网可能滞后,但我确实在发出函数顶部的下载函数中打印了语句,这表明它正在写入/下载每 1% 的数据。
我还在线检查了其他资源。有些人提到使用 eventlet 并在服务器的最高代码级别执行类似的操作。
但这根本不会导致代码发射。
其他人提到使用像 redis 这样的消息队列,但我不能使用 redis,我计划将整个 python 代码转换为二进制可执行文件,以便在 linux 平台上完全可移植以与本地客户端通信。
这是我的 server.py
这是我将 sio 作为报告参数传入的 download_w_progress 函数
javascript - python - 如何在python-socketio中从python服务器向javascript客户端发出消息?
socketio 客户端成功连接到服务器并向服务器发送消息,emit
但另一个方向服务器到客户端失败。我找不到错误的根源。这是
这是app.py
基于python-socketio网站中的示例的服务器python:
我尝试评论其中一个await sio.emit('reply', data)
orawait sio.send(data)
但结果是一样的。这是 javascript 客户端index.html
:
在终端窗口上,我运行服务器。然后,我打开两个浏览器窗口(Chrome 版本 69.0.3497.100(官方构建)(64 位))并从其中一个窗口发送“测试”。这是我在每个窗口上看到的内容:
终端
窗口 1(控制台日志)
窗口 2(控制台日志)
django - 源自 python-socketio django 示例的 django 项目无法服务器其他 URL(至少在 django 1.11 中)
在使用python-socketio
s django_example 并看到它运行良好之后,我创建了一个新的 django 项目,像示例一样对其进行配置,将示例应用程序复制到项目中(完成它覆盖了 runserver 管理命令)。一切正常,我可以进行一些更改,以便您可以设置一个nick,一些 redis 的东西来查找 sid 的 nick,并且能够支持向 nick 发送私人消息。一切仍然很好。
我认为下一个合乎逻辑的步骤是,而不是手动设置昵称,要求用户登录,将他们的用户名公开为模板中脚本块中的 var(我移至scripts/index.html
)templates/index.html
,并自动让 javascript 发出我的连接时自动使用用户名自定义“set_nick”事件。
我LOGIN_URL = '/accounts/login'
在settings.py中定义,在我的urls.py中包含 'django.contrib.auth.urls'并用@login_required
.
直到那时我才注意到,无论您请求什么 URL,您总是会获得聊天应用程序索引视图 - 没有登录页面重定向,“/admin/”被忽略等。
编辑已解决 - 请参阅下面的答案。
python - 如何使用 python-socketio 连接到“普通”websocket?
据我了解,websocket
是协议,socketio
是实现该协议的库。
所以我决定从 pythonwebsocket-client
转移到python-socketio
使用 decorator 实现行为似乎更容易@sio.on('subject')
。
我正在使用该connect
方法的不同参数,但我总是遇到错误。
使用sio.connect('ws://echo.websocket.org')
orsio.connect('http://echo.websocket.org', transports=['websocket'])
错误为:
因此,查看我尝试过sio.connect('http://echo.websocket.org', transports=['websocket'], socketio_path='')
的日志,但只打印日志Attempting WebSocket connection to ws://echo.websocket.org//?transport=websocket&EIO=3
,然后它进入某种无限循环并且永远不会返回。
这是我正在尝试的代码:
python - Python-socketio:如何从服务器向客户端发送消息?
在服务器上,因为eventlet.wsgi.server(eventlet.listen(('', 5000)), app)
是阻塞的,所以下一行sio.emit('message', "hello")
不会运行。如何从服务器向客户端发送消息?我必须创建另一个线程吗?
我的服务器代码:
我的客户代码: