Я хочу, чтобы иметь связь между двумя клиентом и одним сервером в RPyC, и я хочу, чтобы вызвать метод сервера из client1, что в способе сервера вызов метода клиента 2, это мой код:Как я могу получить список клиентов, подключенных к серверу в RPyC?
import rpyc
#server:
class ServerService(rpyc.Service):
def on_connect(self):
print "Connected To Server\n"
def on_disconnect(self):
print "Disconnected From Server\n"
def exposed_command(self, cmd):
self._cmd = cmd
self._conn.root.run_command(self._cmd)
#client1:
class AppService(rpyc.Service):
def exposed_foo():
return "foo"
conn = rpyc.connect("localhost", 2014, service = AppService)
conn.root.command(self._cmd)
#client2:
class ClientService(rpyc.Service):
def exposed_run_command(self, cmd):
eval(cmd)
# connect to server
conn = rpyc.connect("localhost", 2014, service = ClientService)
У меня есть 3 отдельных файла, которые я хочу подключить 2 клиента по серверу.
Update
Я пытаюсь объяснить более мою ситуацию и добавить коды 3 модуля, который я использую ... , пожалуйста, объясните для меня больше и дать мне советы о ID любых идентификаторов client.getting и другие вещи вы знаете, у меня есть один сервер и два клиента, один клиент запускает простую программу PyQt, которая получает команду maya python и с нажатием на ее кнопке я хочу запустить команду на клиенте 2, которая запускается на майе, нормально ? Но я хочу связать оба клиента вместе и вызывать их методы друг от друга как одноранговое соединение. Но я не знаю, как назвать run_command от клиента 2 (майа) от client1 (PyQt)
сторонаСервер:
import rpyc
class ServerService(rpyc.Service):
def on_connect(self):
print "Connected To Server\n"
def on_disconnect(self):
print "Disconnected From Server\n"
def exposed_command(self, cmd):
self._cmd = cmd
self._conn.root.run_command(self._cmd)
if __name__ == "__main__":
from rpyc.utils.server import ThreadedServer
t = ThreadedServer(ServerService, port = 2014)
print "Server is ready ..."
t.start()
Client1 (PyQt):
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
import rpyc
class ClientApp(QDialog):
def __init__(self, parent = None):
super(ClientApp, self).__init__(parent)
self.label = QLabel("CMD: ")
self.textBox = QLineEdit()
self.button = QPushButton("Run Command")
layout = QHBoxLayout(self)
layout.addWidget(self.label)
layout.addWidget(self.textBox)
layout.addWidget(self.button)
self.setWindowTitle("Client App")
# SIGNALS
self.button.clicked.connect(self.sendCommand)
self._cmd = str(self.textBox.text())
self.sendCommand()
def sendCommand(self):
print "Printed Command : "
self._cmd = str(self.textBox.text())
conn.root.command(self._cmd)
class AppService(rpyc.Service):
def exposed_foo2():
return "foo2"
conn = rpyc.connect("localhost", 2014, service = AppService)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = ClientApp()
window.show()
Client2 (майа):
import rpyc
from maya import cmds
class ClientService(rpyc.Service):
def exposed_run_command(self, cmd):
eval(cmd)
# connect to server
conn = rpyc.connect("localhost", 2014, service = ClientService)
Я думаю, что последний абзац, вероятно, является наиболее актуальным. Похоже, что у ОП есть основные понятия о том, чтобы один клиент разговаривал с сервером. Но нет никакой концепции вещания сообщений или маршрутизации их от одного конкретного клиента к другому. – jdi