我尝试使用ZeroRPC python服务器和node.js客户端进行一些简单的负载测试。我注意到,如果请求的时间超过10秒,我就不会得到任何数据。我试图在python代码中配置无心跳:
s = zerorpc.Server(Test(), heartbeat=None)
以及尝试配置node.js客户端:
new zerorpc.Client({ timeout: 60, heartbeatInterval: 60000 }),
但仍然看到相同的行为。
如何获得超过10秒的请求才能返回结果?
答案 0 :(得分:0)
zerorpc-node(0.9.3)的最后一个可用版本使用了一个带编码的HEARBEAT超时。
正如您在https://github.com/dotcloud/zerorpc-node/blob/0.9.3/lib/channel.js中看到的那样:
//Heartbeat rate in milliseconds
var HEARTBEAT = 5000;
...
//Resets the heartbeat expiration time
Channel.prototype._resetHeartbeat = function() {
this._heartbeatExpirationTime = util.curTime() + HEARTBEAT * 2;
};
但是,当您尝试在客户端构造函数中指定时,最新的主版本会实现hearbeatInterval选项。
然后你的代码可以使用命令
安装最新的masternpm install git+https://github.com/dotcloud/zerorpc-node.git
或等待新版本......
答案 1 :(得分:0)
对于最新的js zerorpc版本v0.9.8
:
# npm list zerorpc
xxx/electron-python-example
└── zerorpc@0.9.8
和最新的python zerorpc版本v0.6.3
# pip show zerorpc
Name: zerorpc
Version: 0.6.3
Summary: zerorpc is a flexible RPC based on zeromq.
Home-page: https://github.com/0rpc/zerorpc-python
Author: François-Xavier Bourlet <bombela+zerorpc@gmail.com>.
Author-email: UNKNOWN
License: MIT
Location: xxx/venv/lib/python3.8/site-packages
Requires: msgpack, future, pyzmq, gevent
Required-by:
其中已为您提供heartbeatInterval
。
所以我在这里使用代码electron-python-example/renderer.js
:
const constLargeEnoughHeartbeat = 60 * 60 * 24 * 30 * 12 // 1 Year
clientOptions = {
"heartbeatInterval": constLargeEnoughHeartbeat,
}
let client = new zerorpc.Client(clientOptions)
可以实现您期望的:心跳足够大到1年->超过10秒钟,js和python仍在运行,没有更多错误
invoke startSaver: error=Error: Lost remote after 10000ms
zerorpc.exceptions.LostRemote: Lost remote after 10s heartbeat