Qt 什么';不同的QRemoteObjectRegistryHost和QRemoteObjectHost?
我是新来学习Qt 什么';不同的QRemoteObjectRegistryHost和QRemoteObjectHost?,qt,qt5,qtremoteobjects,Qt,Qt5,Qtremoteobjects,我是新来学习QRemoteObjects,我了解的用法。但我不了解机制。我混淆了QRemoteObjectRegistryHost、QRemoteObjectHost、QRemoteObjectNode和QRemoteObjectReplica之间的关系,有人能给我简单的解释吗 在注册表方法中 服务器使用这样的代码 regNode=QRemoteObjectRegistryHost(QUrl('local:registry')) srcNode=QRemoteObjectHost(QUrl('l
QRemoteObjects
,我了解的用法。但我不了解机制。我混淆了QRemoteObjectRegistryHost
、QRemoteObjectHost
、QRemoteObjectNode
和QRemoteObjectReplica
之间的关系,有人能给我简单的解释吗
在注册表方法中服务器使用这样的代码
regNode=QRemoteObjectRegistryHost(QUrl('local:registry'))
srcNode=QRemoteObjectHost(QUrl('local:replica')、QUrl('local:registry'))
#是否将创建两个本地套接字服务器?
客户使用
repNode=QRemoteObjectNode(QUrl('local:registry'))
QUrl('local:registry')和QUrl('local:replica')有什么区别
我认为
QRemoteObjectHost(QUrl('local:replica')、QUrl('local:registry'))
在这种方法中是多余的。在您提供的示例中,没有观察到优势,因此您认为它是多余的
在某些应用程序中,需要有多个源,副本必须连接到每个源是多余的,因此QRemoteObjectRegistryHost的任务是为多个源提供一个连接点,并通过该连接点连接副本
例如,以下方案显示了其用途:
┌-------------------┐ ┌-------------------┐
| QRemoteObjectHost | | QRemoteObjectHost |
└--------┬----------┘ └-------┬-----------┘
| |
| |
┌----┴-----------------------------------┴----┐
| QRemoteObjectRegistryHost |
└--┬-------------------┬-----------------┬----┘
| | |
| | |
┌-------┴----- ---┐ ┌-------┴---------┐ ┌-----┴------- ---┐
|QRemoteObjectNode| |QRemoteObjectNode| |QRemoteObjectNode|
└-----------------┘ └-----------------┘ └-----------------┘
可以通过QRemoteObjectHost
注册多个节点,并且QRemoteObjectHost
在QRemoteObjectRegistryHost
中注册,QRemoteObjectNode
可以通过QRemoteObjectRegistryHost
获得QRemoteObjectHost
节点的副本
为了说明功能,我创建了以下示例:
├── register.py
├── replica.py
└── source.py
register.py
从PyQt5导入QtCore、QtRemoteObjects
如果名称=“\uuuuu main\uuuuuuuu”:
导入系统
app=QtCore.QCoreApplication(sys.argv)
regNode=QtRemoteObjects.QRemoteObjectRegistryHost(
QtCore.QUrl(“tcp://127.0.0.1:5557")
)
sys.exit(app.exec_())
副本.py
从functools导入部分
导入系统
从PyQt5导入QtCore、QtRemoteObjects
如果名称=“\uuuuu main\uuuuuuuu”:
app=QtCore.QCoreApplication(sys.argv)
node=QtRemoteObjects.QRemoteObjectNode(QtCore.QUrl(“tcp://127.0.0.1:5557"))
副本=[]
添加了远程对象上的def(信息):
名称,url=info
打印(“添加对象”、名称、url)
副本=节点。acquireDynamic(名称)
包装器=部分(在初始化、副本、名称时)
replica.initialized.connect(包装器)
复制副本。追加(复制副本)
node.registry().remoteObjectAdded.connect(在添加了远程对象的基础上)
def on_已初始化(副本,名称):
包装=部分(打印,名称)
replica.dataChanged.connect(包装器)
sys.exit(app.exec_())
source.py
导入系统
从PyQt5导入QtCore、QtRemoteObjects
类节点(QtCore.QObject):
dataChanged=QtCore.pyqtSignal(str)
如果名称=“\uuuuu main\uuuuuuuu”:
app=QtCore.QCoreApplication(sys.argv)
parser=QtCore.QCommandLineParser()
addPositionArgument(“url”,“主机url不同于”tcp://127.0.0.1:5557")
addPositionArgument(“名称”、“节点名称”)
parser.process(应用程序)
args=parser.positionarguments()
如果len(args)!=2:
打印(“仅需要url和名称”)
系统出口(-1)
url,name=args
如果QtCore.QUrl(“tcp://127.0.0.1:5557“”==QtCore.QUrl(url):
打印(“url”不同tcp://127.0.0.1:5557")
系统出口(-1)
node=node()
srcNode=QtRemoteObjects.QRemoteObjectHost(
QtCore.QUrl(url),QtCore.QUrl(“tcp://127.0.0.1:5557")
)
srcNode.enableRemoting(节点,名称)
def on_timeout():
data=QtCore.QDateTime.currentDateTime().toString()
node.dataChanged.emit(数据)
计时器=QtCore.QTimer(间隔=1000,超时=on\u超时)
timer.start()
sys.exit(app.exec_())
然后在不同的CMD/终端上运行以下命令:
python register.py
在replica.py的CMD/terminal控制台中,您将看到以下内容:
# ...
node1 Tue Jan 7 22:32:09 2020
node2 Tue Jan 7 22:32:09 2020
node1 Tue Jan 7 22:32:10 2020
node2 Tue Jan 7 22:32:10 2020
# ...
是否有任何工具或方法可以像您写的那样编写
控制台标记样式?当我不想粘贴图片来说明某些事情时,它可能会有用。@jie不,如果有,请告诉我,我是手动完成的。
python source.py tcp://127.0.0.1:5558 node1
python source.py tcp://127.0.0.1:5559 node2
# ...
node1 Tue Jan 7 22:32:09 2020
node2 Tue Jan 7 22:32:09 2020
node1 Tue Jan 7 22:32:10 2020
node2 Tue Jan 7 22:32:10 2020
# ...