python rpyc 2 соединения требуются для обмена сообщениями сервер / клиент? - PullRequest
0 голосов
/ 24 октября 2018

В моем сценарии у меня есть задача сервера (управление сервоприводами) и задача клиента (графический интерфейс позиций сервомотора).

На сервере у меня есть класс 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, что соединение должно работать в обоих направлениях- но я не могу понять, как настроить прослушиватель на стороне клиента.

...