有没有办法连接到socket.io服务器并保持连接活动,就像js客户端一样,来自django后端?
这样的代码:
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进行此类任务 - 仅在js客户端保留socket.io。
答案 0 :(得分:2)
简介:
你所描述的方式是不可能的。如果你想使用django连接到socket.io之类的东西,请看看gevent.io
详细说明:
当使用传统的Web服务器进行部署时,由于进程/线程模型,Django不适合处理长时间的连接任务。要处理长时间连接,需要采用一些事件驱动的Web服务器,例如[gunicorn] [2]
答案 1 :(得分: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)