Neste trabalho você irá implementar uma chamada remota a procedimento usando a biblioteca RPyC de Python.
Para instalar a biblioteca rpyc basta executar o comando:
pip install rpycEste trabalho pode ser realizado em grupo de até duas pessoas.
O grupo deve enviar um relatório com as respostas às questões para simone@ic.uff.br até dia 25 de junho de 2019 às 24:00 horas.
O modelo que iremos utilizar é orientado a serviços.
A seguir apresenta-se um template para um servidor oferecer os serviços de chamada remota de procedimento.
import rpyc
class MyService(rpyc.Service):
def on_connect(self, conn):
# código que é executado quando uma conexão é iniciada, caso seja necessário
pass
def on_disconnect(self, conn):
# código que é executado quando uma conexão é finalizada, caso seja necessário
pass
def exposed_get_answer(self): # este é um método exposto
return 42
exposed_the_real_answer_though = 43 # este é um atributo exposto
def get_question(self): # este método não é exposto
return "Qual é a cor do cavalo branco de Napoleão?"
#Para iniciar o servidor
if __name__ == "__main__":
from rpyc.utils.server import ThreadedServer
t = ThreadedServer(MyService, port=18861)
t.start()
Devem existir os dois métodos para conectar e desconectar uma conexão e os outros métodos podem ser definidos livremente por você.
Neste caso, você pode escolher os atributos que vão ser expostos para outros processos: se o nome começa com exposed_, ele poderá ser acessado remotamente, senão ele será acessível somente localmente.
O programa cliente abaixo se conecta com o servidor e executa algumas instruções remotamente.
import rpyc
import sys
if len(sys.argv) < 2:
exit("Usage {} SERVER".format(sys.argv[0]))
server = sys.argv[1]
conn = rpyc.connect(server,18861)
print(c.root)
print(c.root.get_answer())
print(c.root.the_real_answer_though)