ZeroRPC Web サイトから Python server/node.js クライアント HelloWorld の例を実行しようとしています。revelant ライブラリはすべて正しくインストールされているように見えますが、サンプルを実行すると次のエラーが表示されます。
{ name: 'HeartbeatError',
message: 'Lost remote after 10000ms',
traceback: '' }
誰もこれを見たことがありますか?
私は "zeropc": "^0.9.3" を使用しています。時間のかかる Python コードを実行していたときに、同じ問題に遭遇しました。この問題を解決するには、zerorpc のライブラリ コードを変更する必要があります。 node_modules -> zerorpc -> lib -> channel.js 対応するメソッドを次のように変更します。
//Runs the heartbeat on this channel
Channel.prototype._runHeartbeat = function() {
var self = this;
return setInterval(function() {
if(util.curTime() > self._heartbeatExpirationTime) {
//If we haven't received a response in 2 * heartbeat rate, send an
//error
// self.emit("heartbeat-error", "Lost remote after " + (HEARTBEAT * 2) + "ms");
// self.close();
}
//Heartbeat on the channel
try {
var event = events.create(self._envelope, self._createHeader(), "_zpc_hb", [0]);
self._socket.send(event);
} catch(e) {
console.error("Error occurred while sending heartbeat:", e);
}
}, HEARTBEAT);
};
github の最新コード: https://github.com/dotcloud/zerorpc-node では、この問題が解決されています。
可能であれば、gevent.sleep を使用して、ハートビートを含む待機中のメッセージを処理するのに十分な時間を zerorpc に与えます。