问题标签 [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.

0 投票
1 回答
2454 浏览

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 示例所做的更改。

  1. 显然nginx(从 1.3.13 版开始)支持 web sockets。我更新了 python-on-dotcloud 示例中的构建器脚本以指向此开发版本:nginx_download_url="http://nginx.org/download/nginx-1.3.14.tar.gz"

  2. 我将 gunicorn 设置为绑定到 unix 套接字,然后从 nginx.conf 设置 proxy_pass 以将流量上游发送到proxy_pass http://appserver;我定义了 appserver 的 gunicorn。

  3. 我正在运行一个带有 gevent-socket.io 的 django 应用程序,它可以在没有运行 nginx 的情况下正常工作。(我只是将 gunicorn 绑定到 dotcloud.yml 中的 0.0.0.0:$PORT_WWW)

我的问题是这些。

  1. 我是否试图解决一个非问题?

    一个。我已经阅读了大量建议将 gunicorn 放在 nginx 后面的内容。在 dotcloud 的负载均衡器在一线的背景下,这仍然是真的吗?

    湾。如果我不希望我会受到 DoS 攻击,那么将 gunicorn 放在 nginx 后面仍然很重要吗?

  2. 是否可以像我尝试设置的那样通过 unix 套接字运行 websockets?

  3. unix 套接字会破坏 dotcloud 上的缩放吗?

  4. 如果我需要改用端口,如何设置?我不认为我可以在同一个应用程序中分配两个 http 端口。如果我将它分成两个应用程序,那么我不确定如何将 PORT_WWW 环境变量从 gunicorn 应用程序传递到 nginx 应用程序,以便它最终可用于 nginx 安装后脚本,从而在生成的 nginx.conf 中可用。

  5. 关于为什么这不能按原样工作的任何想法?

我在下面包含了三个配置文件。让我知道其他人是否会提供帮助。谢谢!

点云.yml

nginx.conf.in(与常规的 nginx.conf 相同,只有 PORT_WWW 等待交换真实端口号)

gunicorn.conf

0 投票
0 回答
870 浏览

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 方法,我在网上做了很多研究,找不到实现这一点的方法。请帮忙。

0 投票
2 回答
2658 浏览

python - 如何在服务器端发出 SocketIO 事件

我正在运行一个 gevent-socketio Django 应用程序。

我有类似这堂课的东西

但是,如果我从 javascript 客户端收到事件,一切正常,例如send事件被正确处理

emit如果我想在服务器端进行一些活动,我会有点迷茫。我可以在课堂上做到这一点socket.send_packet

但是现在我想将一些事件链接到post_save信号,所以我想send_packet从这个命名空间类之外,这样做的一种方法是

我只是不知道如何获得 ConnectNamespaceInstance 的实例

总结一下,我只想在收到post_save信号后向javascript客户端发送一个事件

0 投票
1 回答
1027 浏览

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.

0 投票
1 回答
2829 浏览

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 脚本:

0 投票
0 回答
633 浏览

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,因为有很多异步请求。

有事,拜托!

提前致谢。

0 投票
1 回答
330 浏览

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?

0 投票
1 回答
193 浏览

python - 如何使用 pyramid_sockjs 消息传递?

我正在使用pyramid_sockjs构建一个 Pyramid 应用程序。这个应用程序需要对来自 redis pub/sub 或 rabbitmq 的传入消息做出反应。我应该在哪里插入逻辑来监听消息系统并通过向 sockjs 客户端发送消息来做出反应?

我找到了 socket.io 的这个链接,我想对 sockjs 和 Pyramid 做同样的事情。

0 投票
0 回答
207 浏览

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 代码?发射函数如何知道将响应发送到哪个房间?

0 投票
1 回答
236 浏览

django - 在 Django 上测试 gevent-socketio

我有一个用于文字游戏的django网站,gevent-socketio我想自动化测试。

由于gevent-socketio暗示了用户交互和 JavaScript 操作,我被困在如何开始编写测试上。

任何人都可以指出我正确的方向吗?