0

我试过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 代码有关。

4

1 回答 1

2

zerorpc 使用 gevent 进行协作异步 IO,而 django 一次处理一个请求。当 django 处理一些 IO 时,zerorpc 无法获得其应有的 CPU 时间份额,并且无法处理心跳。在 zerorpc-python 中可以关闭心跳(出于这个原因),但不在 zerorpc-node 上!

一种解决方案是在 gevent ioloop 之上运行 django,看起来http://gunicorn.org/可以提供一些帮助。

于 2015-04-03T08:38:11.020 回答