Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 什么';不同的QRemoteObjectRegistryHost和QRemoteObjectHost?_Qt_Qt5_Qtremoteobjects - Fatal编程技术网

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
# ...