rpyc服务端调用客户端方法

问题描述 投票:0回答:1

我目前正在使用 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() 行,我不知道正确的语法是什么,而且教程根本没有指定。

任何帮助将不胜感激!

python try-catch rpyc
1个回答
0
投票

我刚刚遇到了同样的问题,答案是在你的 TestService 中你调用了 conn.root.example() ,你并没有真正连接到另一端。

你应该做类似的事情

class TestService(rpyc.Service):
def on_connect(self, conn):
    res = super().on_connect(conn)
    conn.root.example()

    return res
© www.soinside.com 2019 - 2024. All rights reserved.