问题标签 [gevent-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.
django - gunicorn、nginx (v 1.3.14)、django 和 gevent-socket.io,在 dotcloud 上
我正在尝试在 dotcloud 上的 nginx (v 1.3.14) 后面部署 gunicorn + gevent。我有几个问题。我的目标是改编python-on-dotcloud示例。到目前为止,我还不能让 websockets 部分使用这个设置。换句话说,我必须手动刷新我的页面以获取更新,而不是通过 socket.io。这对我来说都是全新的,所以这可能是一个完全的菜鸟错误。这是一个相关的问题。
以下是我对 python-on-dotcloud 示例所做的更改。
显然nginx(从 1.3.13 版开始)支持 web sockets。我更新了 python-on-dotcloud 示例中的构建器脚本以指向此开发版本:
nginx_download_url="http://nginx.org/download/nginx-1.3.14.tar.gz"
我将 gunicorn 设置为绑定到 unix 套接字,然后从 nginx.conf 设置 proxy_pass 以将流量上游发送到
proxy_pass http://appserver;
我定义了 appserver 的 gunicorn。我正在运行一个带有 gevent-socket.io 的 django 应用程序,它可以在没有运行 nginx 的情况下正常工作。(我只是将 gunicorn 绑定到 dotcloud.yml 中的 0.0.0.0:$PORT_WWW)
我的问题是这些。
我是否试图解决一个非问题?
一个。我已经阅读了大量建议将 gunicorn 放在 nginx 后面的内容。在 dotcloud 的负载均衡器在一线的背景下,这仍然是真的吗?
湾。如果我不希望我会受到 DoS 攻击,那么将 gunicorn 放在 nginx 后面仍然很重要吗?
是否可以像我尝试设置的那样通过 unix 套接字运行 websockets?
unix 套接字会破坏 dotcloud 上的缩放吗?
如果我需要改用端口,如何设置?我不认为我可以在同一个应用程序中分配两个 http 端口。如果我将它分成两个应用程序,那么我不确定如何将 PORT_WWW 环境变量从 gunicorn 应用程序传递到 nginx 应用程序,以便它最终可用于 nginx 安装后脚本,从而在生成的 nginx.conf 中可用。
关于为什么这不能按原样工作的任何想法?
我在下面包含了三个配置文件。让我知道其他人是否会提供帮助。谢谢!
点云.yml
nginx.conf.in(与常规的 nginx.conf 相同,只有 PORT_WWW 等待交换真实端口号)
gunicorn.conf
python - 运行烧瓶 + Gunicorn + SocketIO
我正在为我的烧瓶应用程序运行 SocketIOServer,并且我有一个如下所示的 run.py 脚本:
run_app 看起来像这样:
我像这样运行:python run.py production/dev/test 等。
现在我想使用 gunicorn 在生产中运行它,所有在线教程都建议执行以下操作: gunicorn run:app -c gunicorn-config.py 我的问题是我不想再只运行我的应用程序了。我想告诉 gunicorn 在 SocketIOServer 上运行 serve_forever 方法,我在网上做了很多研究,找不到实现这一点的方法。请帮忙。
python - 如何在服务器端发出 SocketIO 事件
我正在运行一个 gevent-socketio Django 应用程序。
我有类似这堂课的东西
但是,如果我从 javascript 客户端收到事件,一切正常,例如send
事件被正确处理
emit
如果我想在服务器端进行一些活动,我会有点迷茫。我可以在课堂上做到这一点socket.send_packet
但是现在我想将一些事件链接到post_save
信号,所以我想send_packet
从这个命名空间类之外,这样做的一种方法是
我只是不知道如何获得 ConnectNamespaceInstance 的实例
总结一下,我只想在收到post_save
信号后向javascript客户端发送一个事件
django - Scale Gevent Socketio
I currently have a site setup using Django. I have added Gevent Socketio to add a chat function. I have a need to scale it as there are quite a few users already on the site and can't find a way to do so.
I tried https://github.com/abourget/gevent-socketio/tree/master/examples/django_chat/chat
I am using Gunicorn & the socketio.sgunicorn.GeventSocketIOWorker
worker class so at first I thought of increasing the worker count. Unfortunately this seems to fail intermittently. I have started rewriting it to use redis from a few sources I found and have 1 worker on each server which is now being load balanced. However this seems to have the same problem. I am wondering if there is some issue in the gevent socketio code itself which does not allow it to scale.
Here is how I have started which is just the submit message code.
websocket - 让 phantomjs、socket.io 和 gevent-socketio 一起工作
我正在尝试构建一个利用 Phantomjs 1.7(模拟浏览器)的应用程序并创建一个 Python 后端来触发一些事件并收集数据。
问题是 Phantomjs 和我的 Python 程序这两个进程需要双向通信。问题是在里面page.evaluate
我不能:
- 传递任何复杂的对象,例如“fs”(从标准输入读取)
- 创建一个 WebSocket 以连接到我的 Python 脚本
- 任何其他形式的进程间通信都受到限制
所以我的解决方案很简单:
- 将 socket.io js 注入我正在查看的页面。
- 连接到我使用 gevent-socketio 实现的 python 服务器
当我尝试从 page.evaluate 内部连接时,我得到:
这是 Phantomjs 脚本:
这是服务器端 Python 脚本:
python - 让 apache 和 gevent(django-socketio) 一起工作
我正在使用 python、django 和最近的 django-socketio ( https://github.com/stephenmcd/django-socketio ) 开发 ubuntu 12.04。我的问题是当我通过套接字向服务器发送一些东西并等待它发回时,它没有。django 服务器在默认的 http 端口(80)上运行。以及 8080 端口上的 socketio。如果我像这样访问我的网站:' http : //mysite.com/' 使用 socketio 的页面根本不起作用。但是使用 8080 端口,一切正常!
我不使用 socketio 服务器来处理请求的原因(它有一个通过键入 manage.py 命令启动的服务器)是我不知道如何使用 apache 来完成它。无法设置 wsgi 文件。到目前为止我所知道的是,您必须将 SocketIOServer 附加到 django 应用程序等等。试过这个,没有成功。
我的问题是:我怎样才能使这项工作?也许在一个端口上处理另一个在另一个端口上应该可以工作。但也试过这个。
我真的不想使用 ajax,因为有很多异步请求。
有事,拜托!
提前致谢。
python - Starting django-socketio in production
I installed Django-socketio because it seems like the best way to implement chat by myself. The problem I have is that when I run
python manage.py runserver_socketio host:port
it runs and I can't close the terminal or it will stop working, how can I get around that?
python - 如何使用 pyramid_sockjs 消息传递?
我正在使用pyramid_sockjs构建一个 Pyramid 应用程序。这个应用程序需要对来自 redis pub/sub 或 rabbitmq 的传入消息做出反应。我应该在哪里插入逻辑来监听消息系统并通过向 sockjs 客户端发送消息来做出反应?
我找到了 socket.io 的这个链接,我想对 sockjs 和 Pyramid 做同样的事情。
django - gevent-socketio:浏览器接收另一个浏览器的响应
我已经尝试了几天了,但我似乎无法解决这个问题。我的问题本质上在于,如果我有 2 个浏览器同时请求,我的服务器端 socketio 响应将向错误的浏览器请求返回错误的结果(结果被交换)。我认为我的问题是我不知道 socket.io 如何确定将结果返回到哪个浏览器。当前的代码有很多移动部分,要以人们可以找到有意义的方式进行剥离会很痛苦,因此,我认为如果有人可以帮助我解决并理解在 django_chat 中找到的示例,我将能够解决我的错误https://github.com/abourget/gevent-socketio/tree/master/examples/django_chat。所以这里是:
因此,当用户在聊天中输入内容时,此代码会按顺序触发
然后该函数在类中socket.emit
触发此函数ChatNameSpace
:
它又调用emit_to_room
了在 RoomsMixin 类中找到的这个函数
我了解当用户加入聊天室时,[rooms]
会话会更新为他所属的聊天室。它看起来像['/chat_1', '/chat_2']
数字表示房间对象的主键的地方。
这就是我迷路的地方。特定聊天室的这种区别在哪里符合前端 js 代码?发射函数如何知道将响应发送到哪个房间?
django - 在 Django 上测试 gevent-socketio
我有一个用于文字游戏的django
网站,gevent-socketio
我想自动化测试。
由于gevent-socketio
暗示了用户交互和 JavaScript 操作,我被困在如何开始编写测试上。
任何人都可以指出我正确的方向吗?