我尝试了requests
,但由于tcp连接需要很长时间(我不知道如何保持套接字打开),因此它看起来似乎很慢。
我现在正在尝试zerorpc
,它的概念是persistent connection
Django< - > node.js通信适用于第一条消息,但在第二次尝试时失败并出现Lost remote after 10s heartbeat
错误。
我可能遗漏了一些明显的东西。
# following connection step is done in python a module so that it gets called only one time
import zerorpc
client = zerorpc.Client()
client.connect("tcp://127.0.0.1:7015")
def something(...):
# this gets called for a http request, and we are messaging node.js using the zerorpc client.
...
client.call_rpc(message)
其他客户端(来自命令行)仍然可以与服务器通信并获得响应,因此我猜它与上面的django代码有关。
答案 0 :(得分:2)
zerorpc将gevent用于协作异步IO,而django一次处理一个请求。当django正在处理一些IO时,zerorpc没有得到其公平的CPU时间份额,并且无法处理心跳。在zerorpc-python中可以关闭心跳(出于这个原因),但不是在zerorpc节点上!
一种解决方案是在gevent ioloop上运行django,看起来http://gunicorn.org/可以提供一些帮助。