在我的方案中,我有一个服务器任务(控制伺服器)和一个客户端任务(伺服器位置的GUI)。
在服务器上,我有一个serverListener类,它以这种方式启动
class serverListener(rpyc.Service):
... (my exposed methods to control the servos)
t = ThreadedServer(serverListener, port=20010)
t.start()
在客户端上,我与服务器建立连接:
requestConn = rpyc.connect(serverIp, 20010)
在服务器端,可以运行多个伺服器,并根据自己的时间向gui发送更新。
要完成这项工作,我的结论是我需要另一个连接。 因此客户端具有自己的侦听器:
class clientListener(rpyc.Service):
... (my exposed methods for the servo update information)
通过客户端的端口实例化:
t = ThreadedServer(clientListener, port=20011)
t.start()
当客户端可以打开其与服务器的连接时,它将调用服务器上的公开方法,发送其自己的IP和端口。然后,服务器打开另一个从服务器到客户端的连接。
listenerConn = rpyc.connect(clientIp, clientPort)
这是我当前的设置,目前为止可以使用。但是,维护这两个连接很难看,尤其是在服务器或客户端重新启动时。连接on_disconnect仅在连接的接收方触发,我必须关闭发送方,否则在重新连接时会引发EOF错误。
我已经在rpyc文档中阅读到,连接应该双向运行-但我不知道如何在客户端设置侦听器。