我正在尝试使用RPyC从客户端向另一个客户端发送消息。
目前我使用下面的代码,先启动服务器,然后连接并“注册”客户端到服务器(我也可以通过on_connect()方法完成...但不会改变就我看来的任何事情而言。)
任何建议或帮助非常感谢,谢谢!
要注册客户端,请执行以下操作:
在一个shell(client1 => light)上:
import h_client
c = h_client._connectToServer()
c.root.registerClient("light")
On Another shell(client2 => dark):
import h_client
c = h_client._connectToServer()
c.root.registerClient("dark")
c.root.sendDataToClient("light", "msg", "me", "My great message")
脚本冻结,直到我回到“光”shell并写一些东西(比如c.root ...),然后我可以在我的“light”shell上看到结果,如果我在shell中什么也不做似乎结果永远不会出现..
服务器(h_server.py):
import rpyc
from rpyc.utils.server import ThreadedServer
class HChat_Server(rpyc.Service):
CLIENTS = {}
def exposed_registerClient(self, clientID):
self.CLIENTS[clientID] = self._conn.root.exposed_catchData
def exposed_getAllClients(self):
return self.CLIENTS
def exposed_sendDataToClient(self, clientID, dataType, sender, data):
self.CLIENTS[clientID](dataType, sender, data)
if __name__ == "__main__":
t = ThreadedServer(HChat_Server, port = 5000, protocol_config={"allow_public_attrs" : True})
t.start()
客户端(h_client.py):
class HChat_ClientService(rpyc.Service):
def exposed_catchData(self, dataType, sender, data):
sys.stdout.write("=> {0}: {1} ({2})".format(sender, data, dataType))
def _connectToServer():
server_conn = rpyc.connect("localhost", 5000, service=HChat_ClientService)
return server_conn