我目前正在使用 rpyc 构建一个服务器和多个连接到它的客户端。我想将客户端中的数据推送到服务器以进行进一步处理,并且我想在客户端连接到服务器时调用客户端方法来执行此操作。从他们的教程中,它说客户端可以将他们的服务暴露给服务器,但我遇到了错误。
我的服务器代码:
import rpyc
class TestService(rpyc.Service):
def on_connect(self, conn):
conn.root.example()
if __name__ == "__main__":
from rpyc.utils.server import ThreadedServer
t = ThreadedServer(TestService, port=18861, auto_register=True)
t.start()
我的客户代码:
import rpyc
class ClientService(rpyc.Service):
def exposed_example(self):
print "example"
if __name__ == "__main__":
try:
rpyc.discover("test")
c = rpyc.connect_by_service("test", service=ClientService)
c.close()
except:
print "could not find server"
客户端可以连接到服务器,但是线程会出现异常,报错:raise EOFError("stream has been closed")。它抱怨 conn.root.example() 行,我不知道正确的语法是什么,而且教程根本没有指定。
任何帮助将不胜感激!
我刚刚遇到了同样的问题,答案是在你的 TestService 中你调用了 conn.root.example() ,你并没有真正连接到另一端。
你应该做类似的事情
class TestService(rpyc.Service):
def on_connect(self, conn):
res = super().on_connect(conn)
conn.root.example()
return res