VeighNa量化社区
你的开源社区量化交易平台
Member
avatar
加入于:
帖子: 126
声望: 14

RPC服务端与客户端不在同一台机器上,有时候网络延迟稍大的时候,经常出现timeout。
当一次出现timeout后,后续任何请求响应模式的通信,都会出现如下错误:
description

猜测是不是因为zmq的请求响应模式是严格一对一关系,出现一次timeout后,其请求序号再也对不上了。

查资料发现有种“懒海盗”模式,不知是否能够解决类似的问题呢?
“懒惰的海盗”(Lazy Pirate)模式:ZMQ 第四章 可靠的请求-应答模式

Member
avatar
加入于:
帖子: 126
声望: 14

按照我对客户端中重载的getattr的定义理解来说,
当dorpc执行超时的时候,执行的是:

                if not n:
                    msg = f"Timeout of {timeout}ms reached for {req}"
                    raise RemoteException(msg)

将引发RemoteException异常,从而导致下一行代码

rep = self.__socket_req.recv_pyobj()

未能继续执行,从而破坏了客户端、服务端严格的一一对应的关系。

不知道对不对,另外该如何来处理呢?

Member
avatar
加入于:
帖子: 126
声望: 14

自己up一下

Administrator
avatar
加入于:
帖子: 4500
声望: 320

可以自己改造下,RpcGateway和RpcService更多是对vnpy.rpc模块用法的DEMO,并不推荐直接实盘用

© 2015-2022 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

【用户协议】
【隐私政策】
【免责条款】