В моем сценарии у меня есть задача сервера (управление сервоприводами) и задача клиента (графический интерфейс позиций сервомотора).
На сервере у меня есть класс serverListener, и он запускается так
class serverListener(rpyc.Service):
... (my exposed methods to control the servos)
t = ThreadedServer(serverListener, port=20010)
t.start()
На клиенте я создаю соединение с сервером:
requestConn = rpyc.connect(serverIp, 20010)
На стороне сервера может быть запущено несколько сервоприводов, и они отправляют обновления в графический интерфейс в свое время.
Чтобы сделать эту работу, я пришел к выводу, что мне нужно другое соединение.Таким образом, у клиента есть собственный слушатель:
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)
Это моя текущая настройка, и она работает до сих пор.Тем не менее, поддержание 2-х соединений довольно уродливо, особенно когда сервер или клиент перезапускаются.Соединения on_disconnect запускаются только на стороне получателя соединения, и я должен закрыть сторону отправителя, в противном случае при переподключении выдается ошибка EOF.
Я прочитал в документации по rpyc, что соединение должно работать в обоих направлениях- но я не могу понять, как настроить прослушиватель на стороне клиента.