• What is DDS？ 什么是DDS？（Data Distribute Service，数据分发服务） 关键字：数据分发服务 DDS The Proven Data Connectivity Standard for the Industrial Interet of Things 经验证的工业物联网数据连接标准 ...
What is DDS？ 什么是DDS？（Data Distribute Service，数据分发服务）
关键字：数据分发服务 DDS

The Proven Data Connectivity Standard for the Industrial Interet of Things 经验证的工业物联网数据连接标准
The Data Distribution Service (DDS™) is a middleware protocol and API standard for data-centric connectivity from the Object Management Group® (OMG®). It integrates the components of a system together, providing low-latency data connectivity, extreme reliability, and a scalable architecture that business and mission-critical Internet of Things (IoT) applications need.
数据分发服务（DDS™）是一个由对象管理组（OMG）发布的以数据为中心的中间件协议和API标准。DDS集成系统中的各个组件，提供低延迟数据连接、高可靠性以及高可扩展体系结构，以适应商业级物联网（IoT）应用程序的需求。
In a distributed system, middleware is the software layer that lies between the operating system and applications. It enables the various components of a system to more easily communicate and share data. It simplifies the development of distributed systems by letting software developers focus on the specific purpose of their applications rather than the mechanics of passing information between applications and systems.
在分布式系统中，中间件是介于操作系统和应用程序之间的软件层，使系统的各个组件能够更容易地通信和共享数据。中间件简化了分布式系统的开发，使软件开发人员专注于应用程序的业务本身，而不是花费精力研究应用程序和系统之间传递信息的机制。
The DDS Middleware is a software layer that abstracts the Application from the details of the operating system, network transport, and low-level data formats. The same concepts and APIs are provided in different programming languages allowing applications to exchange information across operating systems, languages, and processor architectures. Low-level details like data wire format, discovery, connections, reliability, protocols, transport selection, QoS, security, etc. are managed by the middleware.
DDS中间件是一个软件层，它将应用程序从操作系统、网络传输和底层数据格式的细节中抽象出来。DDS提供多种编程语言的API，允许应用程序跨操作系统、跨语言、跨处理器体系结构交换信息。数据格式、发现匹配机制、连接方式、可靠性、网络协议、传输方式选择、QoS、安全性等底层细节由中间件管理。
Data Centricity 以数据为中心
DDS provides Qos-controlled data-sharing. Applications communicate by publishing and subscribing to Topics identified by their Topic name. Subscriptions can specify time and content filters and get only a subset of the data being published on the Topic. Different DDS Domains are completely independent from each other. There is no data-sharing across DDS domains.
DDS提供Qos控制功能。应用程序通过发布和订阅主题进行通信。订阅可以指定时间和内容筛选器，并且只能获取发布主题的数据的子集。不同的DDS域彼此完全独立，跨DDS域无法进行数据通信。
There are many communications middleware standards and products. DDS is uniquely data centric, which is ideal for the Industrial Internet of Things. Most middleware works by sending information between applications and systems. Data centricity ensures that all messages include the contextual information an application needs to understand the data it receives.
市面上虽然存在多种通信中间件标准和产品，唯独DDS是以数据为中心，是工业物联网的理想选择。大多数中间件通过在应用程序和系统之间发送信息来工作。数据中心性保证应用程序能够理解其接收到的数据，因而所有消息都包含应用程序能够理解其含义所需要的上下文信息。
The essence of data centricity is that DDS knows what data it stores and controls how to share that data. Programmers using traditional message-centric middleware must write code that sends messages. Programmers using data-centric middleware write code that specifies how and when to share data and then directly share data values. Rather than managing all this complexity in the application (your) code, DDS directly implements controlled, managed, secure data sharing for you.
以数据为中心的本质是DDS知道它存储什么数据，并控制如何共享这些数据。使用传统的以消息为中心的中间件的程序员必须编写发送消息的代码；而使用以数据为中心的中间件的时，只需指定数据如何共享、何时共享，编写少量代码即可直接共享数据值。DDS使用户无需在应用程序的代码中管理所有这些复杂的操作，而是直接为用户实现了受控、托管、安全的数据共享。
Global Data Space 全局数据空间
DDS conceptually sees a local store of data called the “global data space.” To the application, the global data space looks like local memory accessed via an API. You write to what looks like your local storage. In reality, DDS sends messages to update the appropriate stores on remote nodes. You read from what looks like a local store.
DDS在概念上创建了一个 “全局数据空间”的本地的数据存储空间。对应用程序来说，全局数据空间看起来像是通过API访问的本地内存：发送端应用程序写入数据时，就像是写到了本地的存储空间；而实际上，由DDS发送消息以更新远程节点上的存储内容；接收端应用程序方可通过读取本地存储获取到数据。
Inside a DDS domain the unit of information sharing is data-objects within Topics. The topic is identified by its name and the data-object by some ‘Key” attributes. This is similar to how key attributes are used to identify records in a Database. This is figure is conceptual. DDS communicates peer-to-peer and does not require the data to be brokered by a server or cloud.
在DDS域中，信息共享的单位是主题的数据对象。主题由其名称标识，数据对象由一些“键（Key）”属性标识。这类似于在数据库中用键属性来标识数据。上述是一张概念性的图示， DDS进行点对点通信，不需要服务器或云代理进行转发。
All together, the local stores give applications the illusion of having access to the entire global data space. This is only an illusion; there is no global place where all the data lives. Each application locally stores only what it needs and only for as long as it needs it. DDS deals with data in motion; the global data space is a virtual concept that is really only a collection of local stores. Every application, in almost any language, running on any system, sees local memory in its optimal native format. The global data space shares data between embedded, mobile, and cloud applications across any transport, regardless of language or system, and with extremely low-latency.
本地存储的模式使应用程序产生了访问整个全局数据空间的假象，但这仅仅是一种假象；不存在一个全局空间可以容纳所有的数据。每个应用程序只在本地存储其所需的内容，并且只存储一定的时间。DDS处理地动态数据。全局数据空间是一个虚拟概念，实际上只是本地存储的集合。几乎在任何语言中，在任何系统上运行的应用程序都能以其最佳的方式访问本地内存。全局数据空间通过任意传输方式，可以跨语言和操作系统地在嵌入式应用程序、移动应用程序和云应用程序之间共享数据，并且具有极低的延迟。
Quality of Service 服务质量
The data can also be shared with flexible Quality of Service (QoS) specifications including reliability, system health (liveliness), and even security. In a real system, not every other end-point needs every item in your local store. DDS is smart about sending just what it needs. If messages don’t always reach their intended destinations, the middleware implements reliability where needed. When systems change, the middleware dynamically figures out where to send which data, and intelligently informs participants of the changes. If the total data size is huge, DDS intelligently filters and sends only the data each end-point really needs. When updates need to be fast, DDS sends multicast messages to update many remote applications at once. As data formats evolve, DDS keeps track of the versions used by various parts of the system and automatically translates. For security-critical applications, DDS controls access, enforces data flow paths, and encrypts data on-the-fly.
数据还可以使用灵活的服务质量（QoS）进行共享，包括可靠性、系统健壮性（活跃性）甚至安全性等。在一个真实系统中，并不是所有其他端点都需要另一个节点本地存储中的所有内容。DDS在仅发送每个节点所需的内容。DDS的可靠性策略可以确保数据可靠地传输到接收方。当系统发生变化时，中间件会动态地计算出将哪些数据发送到何处，并智能地将变化通知参与者（participants）。如果总数据量较大，DDS可以智能地过滤并将各个端点真正需要的数据发送给接收方。当需要快速更新时，DDS发送多播消息来同时更新多个远程应用程序。随着数据格式的发展，DDS将适配系统中使用的不同的版本并对数据进行自动翻译。对于强调高安全性的应用程序，DDS提供控制访问、强制数据流路径和动态加密数据等手段。
The true power of DDS emerges when you specify all of these things simultaneously, at extremely high speeds, and in a very dynamic, demanding, and unpredictable environment.
当您使用DDS提供的这些特性时，DDS的真正威力就显现出来了，可在动态变化、高要求、不可预测的复杂环境中提供高速可靠的数据传输服务。
Dynamic Discovery 动态发现
DDS provides Dynamic Discovery of publishers and subscribers. Dynamic Discovery makes your DDS applications extensible. This means the application does not have to know or configure the endpoints for communications because they are automatically discovered by DDS. This can be completed at runtime and not necessarily at design or compile time, enabling real “plug-and-play” for DDS applications.
DDS提供发布者和订阅者的动态发现机制。动态发现机制使DDS应用程序可扩展。这意味着应用程序不必知道或配置用于通信的端点，因为它们是由DDS自动发现的。这可以在运行时完成，而不一定在设计或编译时完成，从而为DDS应用程序启用真正的“即插即用”。
This dynamic discovery goes even further than discovering endpoints. DDS will discover if the endpoint is publishing data, subscribing to data, or both. It will discover the type of data being published or subscribed to. It will also discover the publisher’s offered communication characteristics and the subscriber’s requested communications characteristics. All of these attributes are taken into consideration during the dynamic discovery and matching of DDS participants.
这种动态发现机制不仅仅可以发现网络中使用DDS的端点（Endpoint），还可以发现这些端点是发布数据、订阅数据还是同时发布和/或订阅数据，以及相关的数据类型、发布者提供的通信特性与订阅者请求的通信特性等等。在DDS参与者的动态发现和匹配过程中，考虑了所有这些属性。
DDS participants can be on the same machine or across a network: the application uses the same DDS API for communications. Because there is no need to know or configure IP addresses, or take into account the differences in machine architectures, adding an additional communication participant on any operating system or hardware platform becomes an easy, almost trivial, task.
DDS参与者可以在同一台计算机上，也可以跨网络，应用程序使用相同的DDS API进行通信。因为不需要知道或配置IP地址，也不需要考虑机器体系结构的差异，所以在任何操作系统或硬件平台上添加新的通信节点就成了一项极其简单的工作。
Scalable Architecture 可扩展的架构
DDS systems can span from Edge to Fog to Cloud. At the edge they can be used for high-speed real-time machine to machine communications. Within the intermediary system they can provide robust, reliable QoS and content-aware information flows. Integrating these systems DDS provides scalable access and distribution of information all the way to and within the cloud.
DDS可应用于边缘计算、雾计算和云计算。在边缘计算，DDS可以用于实现高速实时的机器间通信。在中间系统中，它们可以提供健壮、可靠的QoS和内容可感知（content-aware）的信息流。DDS提供了可扩展的信息访问和数据分发手段用于集成信息系统，可将各系统接入云端。
The OMG DDS architecture is designed to be scalable from small devices to the cloud and for very large systems. DDS enables the Internet of Things by scaling across thousands or millions of participants, delivering data at ultra-high speed, managing many thousands of data objects, and providing extreme availability and security. DDS simplifies distributed systems development by absorbing much of the complexity in a single, standard communications layer.
OMG DDS的适用范围覆盖了从小型设备到云计算系统等超大型系统。DDS可为成千上万参与者提供以超高速传输数据，同时管理数千个数据对象，提供极高的可用性和安全性，适用于物联网。DDS通过提供一个标准通信层，屏蔽了大量的底层复杂性，简化了分布式系统的开发。
Security 安全性
Protecting mission-critical Industrial IoT environments requires security that scales from edge to cloud, across systems and suppliers. 为关键任务的工业物联网环境提供保护机制，需要提供跨系统、跨供应商的，覆盖从边缘设备到云端的安全性机制。
DDS includes security mechanisms that provide authentication, access control, confidentiality, and integrity to the information distribution. DDS Security uses a decentralized peer-to-peer architecture that provides security without sacrificing real-time performance.
DDS为数据分发提供了身份验证、访问控制、数据加密和数据完整性等安全机制。DDS安全机制在点对点对等架构上实现的，不会影响实时通信的性能。
For further information on the DDS standard then please visit the specifications page.
有关DDS标准的更多信息，请查看DDS规范《DDS (Data Distribution Service) 数据分发服务-规范中文翻译_001》。
Note: A DDS DomainParticipant represents the local membership of the application in a domain. A domain is a distributed concept that links all the applications able to communicate with each other. It represents a communication plane: only the publishers and the subscribers attached to the same domain may interact. Furthermore, it acts as a factory for DDS Publishers, Subscribers, Topics, MultiTopics and ContentFilteredTopics.
注意：DDS 域参与者（DomainParticipant）表示域中应用程序的本地成员身份。域是一个分布式概念，它将所有能够相互通信的应用程序连接起来。它表示一个通信平面：只有同一域中的发布者和订阅者可以进行数据交互。此外，它还充当工厂类用于产生DDS的发布者、订阅者、主题、多主题（MultiTopics）和内容过滤主题（ContentFilteredTopics）等。

译文连载
RTPS规范-译文连载：实时发布订阅协议（RTPS）DDS互操作网络协议规范-中文翻译_001
DDS规范-译文连载：DDS (Data Distribution Service) 数据分发服务-规范中文翻译_001

相关链接
DDS科普：一文读懂DDS（数据分发服务）
DDS定义：什么是DDS？
产品介绍：BLUE DCS分布式数据连接解决方案
产品试用： 海蓝云平台-Blue DCS


展开全文
• 


展开全文
• NameError: name 'question' is not defined Process finished with exit code 1 异常分析：名称question未被定义 异常处理：不能直接引用或者遍历形参， question在代码段一第9行已经定义为变量形参，引用输出...
代码段一：
"""
Author:  yeahthon
Date   :  2019-08-09  12:28:47
E-mail:  yeahthon@163.com
"""
class AnonymousSurvey():
"""收集匿名调查问卷的答案"""

def  __init__(self, question):
"""储存一个问题，并为储存答案做准备"""
self.question = question
self.responses = []

def  show_question(self):
"""显示调查问卷"""
print(question)

def  store_response(self,new_response):
"""储存单份调查问卷"""
self.responses.append(new_response)

def  show_results(self):
"""显示收集到的所有答案"""
print("Survey result:")
for  response in responses:
print('- ' + response)

代码段二：
"""
Author:  yeahthon
Date   :  2019-08-09  12:50:20
E-mail:  yeahthon@163.com
"""
from survey import  AnonymousSurvey

#定义一个问题，并创建一个表示调查的AnonymousSurvey对象
question = "what language did you first learn to speak?"
my_survey = AnonymousSurvey(question)

#显示问题并储存答案
my_survey.show_question()
print("Enter 'q' at any time to quit.\n")
while True:
response = input("Language: ")
if  response == 'q':
break
my_survey.store_response(response)

#显示调查结果
print("\nThink you to everyone cho participated in the survey!")
my_survey.show_results()

运行时显示异常：
G:\python\untitled1\venv\Scripts\python.exe G:/python/untitled1/language_survey.py
Traceback (most recent call last):
File "G:/python/untitled1/language_survey.py", line 13, in <module>
my_survey.show_question()
File "G:\python\untitled1\survey.py", line 16, in show_question
print(question)
NameError: name 'question' is not defined

Process finished with exit code 1

异常分析：名称question未被定义 异常处理：不能直接引用或者遍历形参， question在代码段一第9行已经定义为变量形参，引用输出时应当填入相应实参，即将代码段一第16行 question 改为 self.question，第25行 responses 改为 self.responses。
展开全文
• pyhton 总提示 name ‘XXX’ is not defined 的解决办法 language_survey.py #-*-coding:GBK -*- #11.5 from survey import AnonymousSurvey #定义一个问题，并创建一个表示调查的AnonymousSurvey对象 question =...
pyhton 总提示 name ‘XXX’ is not defined 的解决办法
language_survey.py
#-*-coding:GBK -*-
#11.5

from survey import AnonymousSurvey
#定义一个问题，并创建一个表示调查的AnonymousSurvey对象
question = "What language did you first learn to speak?"
my_survey = AnonymousSurvey(question)

#显示问题并存储答案
my_survey.show_question()
print("Enter 'q' at any time to quit.\n")
while True:
response = input("Language: ")
if response == 'q':
break
my_survey.store_response(response)
# 显示调查结果
print("\nThank you to everyone who participated in the survey!")
my_survey.show_results()


调用的survey
#-*-coding:GBK -*-
#11.4
class AnonymousSurvey():
"""收集匿名调查问卷的答案"""
def __init__(self,question):
"""存储一个问题，并为存储答案做准备"""
self.question=question
self.responses=[]

def show_question(self):
"""显示调查问卷"""
print(question)

def store_response(self,new_response):
"""存储单份调查答卷"""
self.responses.append(new_response)

def show_results(self):
"""显示收集到的所有答卷"""
print("Survey results:")
for response in responses:
print('- '+ response)


如果把language_survey.py的代码放入survey.py中，提示 name ‘responses’ is not defined
首先以为是代码中间有空格，找了两天，结果不时，不定时在哪个文件中出错， 总是提示 name ‘responses’ is not defined name ‘question’ is not defined
后来经过网上询问，结果是这里出的问题：
    def show_question(self):
"""显示调查问卷"""
print(question)          -- self.question

def show_results(self):
"""显示收集到的所有答卷"""
print("Survey results:")
for response in responses:   -- self.responses
print('- '+ response)

在定义class中，需要用self声明的，下面用到的，一定要带self.
希望大家不要犯同样的错误。
展开全文
• I'd assume this is C, since it works in GCC as well. Where is this defined in the standard, and where has it come from? Answer: That's not an operator --> . That's two separate ...
• Name mangling is intended to give classes an easy way to define “private” instance variables and methods, without having to worry about instance variables defined by derived classes, or mucking with...
• 今天就来看一些什么是uri url urn。看看uri:A URI can be further classified as a locator, a name, or both. The term "Uniform Resource Locator" (URL) refers to the subset of URIs that, in additio
• 关于samba的作用在这里我就不作详细的解说了，由于这几天重装了ubuntu...The specified network name is no longer available”这样的一个小问题，卸载，重新安装samba，又重新配置文件，问题依然存在，但是在windows
• ## whatis __init__.py for?

千次阅读 2020-02-06 18:39:28
Python defines two types of packages. regular packages and namespace packages. Regular packages are traditional packages as they existed in python3.2 and ... A regular package is typically implem...
• I'm new to Python. Would you please tell me what's wrong with the following code? When I run it, I got an error ...NameError: global name 'reduce' is not defined". I asked Goolge but it's use...
• ## Whatis this?

千次阅读 2014-03-07 10:34:30
(This is an article I wrote several years ago to explain the this keyword in some programming languages. The title is a pun intended.)Java, C# etc.The this is a keyword in programming languages such a
• docker run --name mysql -p 3306:3306 -v /root/bo/data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -it wzj/mysql docker: Error response from daemon: Conflict. The container name "/mysql&...
• In your opinion, what is the most important characteristic (for example, honesty,intelligence, a sense of humor) that a person can have to be successful in life?
• ## 流利说 Level 3 全文

万次阅读 多人点赞 2019-05-22 10:51:17
This is because the traffic yesterday was much heavier than usual.   -How was the traffic yesterday? –It was much heavier than usual. -Why were several buses late? –The traffic was ...
• for..in loops iterate over the entire prototype chain, which is virtually never what you want. 意思是使用for..in会遍历整个原型链，这样不是很好的实现方法，推荐使用Object.keys formRules:{ name:true,...
• 如题：what is method signature in java？ answer：Definition: Two of the components of a method declaration comprise the method signature—the method's name and the parameter types. 方法声明的两个组件...
• ## whatis RCS/RCS-e

千次阅读 2014-02-07 18:24:22
but it would be hard to get a 'short/tangible' understanding of what it really is. Is RCS a kind of specification ? Is it a kind of software package ? Is it a kind of name for a technology ?   ...
• ## WhatIs NXDOMAIN?

千次阅读 2015-04-06 13:39:02
What is NXDOMAIN? How does nxdomain affects my browsing? Explains the relationship between NXDOMAIN and DNS Hijacking. A DNS server is used to translate a domain name into an IP address or vise ver
• Let’s begin by a short introduction to variable ... It is a mechanism in TensorFlow that allows for sharing variables accessed in different parts of the code without passing references to the vari
• ## apropos与whatis命令

千次阅读 2011-03-03 22:09:00
apropos ...(指令 apropos 与 whatis，这两者检索相同的资料库)指令使用：# apropos who at.allow [at] (5) - determine who can submit jobs via at or batch at.deny [at] (5) - determine who
• Thread Name: Pool Size: 200 (active: 200, core: 200, max: 200, largest: 200), Task: 16150 (completed: 15950) RemotingException: Server side(192.168.10.65,18090) threadpool is exhausted ,detail ...
• So, what is needed now is the distorm3 Python package ( distorm3 ).   # unzip distorm3-3.3.0.zip  # cd distorm3-3.3.0  # sudo python setup.py build install Check again the installation:...
• ## Whatis CIF/4CIF/QCIF/D1?

千次阅读 2011-12-19 15:16:25
QCIF full name Quarter common intermediate format. QCIF is commonly used standardized image format. In the H.323 protocol in the cluster, a video capture device provides the standard acquisition resol
• 严重: Servlet.service() for servlet action threw exception...java.lang.RuntimeException: file name '....' is too long ( > 100 bytes) at org.apache.commons.compress.archivers.tar.TarArchiveOutputStream.p
• ## Whatis The Rule of Three?

千次阅读 2012-07-01 11:48:43
1、拷贝一个对象是什么意思？ 2、拷贝构造函数和拷贝赋值运算符又都是什么？ 3、在什么时候我需要声明他们？ 4、我如何阻止我的对象被拷贝？ 1、前言(Introduction) C++看待用户定义的数据变量 with  ...
• SMARTGADGETSHUB.COM Home Cameras Computers Drones Storage Devices About Us Technical Information ...What is 4K, UHD, QFHD, FHD, and HD ? June 2, 2015by Smart
• 通常我们在 info.plist 中，可以看到类似如下配置：Bundle Display Name - ${PRODUCT_NAME} Executable File -${EXECUTABLE_NAME} ... Bundle nameis folder name, where your app (including ex