0

有没有办法从 django 后端连接到 socket.io 服务器并保持连接,就像 js 客户端一样?

像这样的代码:

from socketIO_client import SocketIO
from django.conf import settings

def trigger_socket():
   socket_client = SocketIO(settings.SIO_HOST, settings.SIO_PORT)
   socket_client.emit('cool_task', {})

工作正常,但在每个任务发出时都会打开连接。有什么办法可以避免吗?或者我错过了关于套接字的一些东西?

UPD FYI实际上,使用 socket.io 在服务器之间进行通信 - 是愚蠢的想法。将 tornadorpc / xmlrpclib 用于此类任务 - 仅将 socket.io 留在 js 客户端。

4

2 回答 2

2

简短的:

按照你描述的方式是不可能的。如果您想使用 django 连接到 socket.io 之类的东西,请查看gevent.io

详细的:

与传统的 Web 服务器一起部署时,由于进程/线程模型,Django 不适合处理长时间的连接任务。为了处理长时间的连接,你需要采用一些事件驱动的Web服务器,例如[gunicorn][2]

于 2012-11-14T08:36:02.727 回答
0

有可能:

from socketIO_client import SocketIO
from django.conf import settings

def trigger_socket():
    with SocketIO(settings.SIO_HOST, settings.SIO_PORT) as socketIO:
        socketIO.emit('cool_task', {})
        socketIO.wait(seconds=0)
于 2013-06-20T10:36:52.183 回答