CarMaker - APO目录
什么是APO - APO library
Protocol
TCP vs UDP
TCP(传输控制协议)和UDP(用户数据报协议)是互联网上常用的两种传输层协议,它们在数据传输方面有以下主要区别:
连接性:TCP是面向连接的协议,而UDP是无连接的协议。TCP在通信之前需要建立一个连接,数据传输完成后需要释放连接。UDP则没有连接的概念,每个数据包都是独立的。
可靠性:TCP提供可靠的数据传输,它使用确认、重传和序列号等机制来确保数据的完整性和顺序性。如果某个数据包丢失或损坏,TCP会重新发送。UDP不提供数据包的确认和重传机制,因此在传输过程中可能会出现丢包或乱序的情况。
效率:由于TCP提供了可靠性保证,它需要额外的开销来建立连接、维护状态和处理错误。这些额外的开销会导致TCP的传输效率相对较低。相比之下,UDP的传输效率较高,因为它没有这些额外的开销。
顺序性:TCP保证数据包按照发送的顺序进行传输和接收,这意味着接收端收到的数据包顺序与发送端发送的顺序一致。UDP没有这种保证,接收端可能会以任意顺序接收到数据包。
流量控制和拥塞控制:TCP具有流量控制和拥塞控制机制,它可以根据网络的状况调整数据传输的速率,以避免网络拥塞和数据丢失。UDP没有这些机制,它不会调整数据传输的速率,因此可能会导致网络拥塞和数据丢失。
基于这些区别,TCP适用于对数据可靠性要求较高的应用,如文件传输、电子邮件和网页浏览等。UDP适用于对实时性要求较高、数据丢失可接受的应用,如音频和视频流媒体、在线游戏和实时通信等。选择使用TCP还是UDP取决于应用的具体需求和对数据传输特性的要求。
Socket
TCP(传输控制协议)和UDP(用户数据报协议)是两种不同的传输层协议,而套接字(socket)是在应用层和传输层之间的接口。
套接字是一种编程接口,它允许应用程序通过网络进行通信。应用程序可以使用套接字与其他应用程序建立连接,并在连接上发送和接收数据。套接字提供了一组API(应用程序编程接口),使开发人员可以使用各种协议(包括TCP和UDP)进行网络通信。
TCP和UDP是套接字可以使用的两种传输协议。它们之间的区别已经在上一个回答中进行了详细解释。简而言之,TCP提供可靠的、面向连接的通信,而UDP提供无连接的通信,效率较高但不可靠。
总结起来,TCP和UDP是两种不同的传输层协议,套接字是应用程序与传输层之间的接口。应用程序可以使用套接字来选择使用TCP或UDP进行网络通信,根据应用程序对数据传输特性的要求来决定使用哪种协议。
APO Library
The APO library is a communications library used to pass messages back and forth between server applications and a client applications. The servers and clients can be running on the same host, on two or more hosts running the same OS and being connected by a network, or on two or more hosts running a different OS and being connected by a network.
APO库是通过TCP(流)和UDP(数据报)套接字构建的高级库 (built over TCP (Stream) and UDP (Datagram) sockets),旨在为用户提供简单的编程接口,同时保持大多数时间关键型应用程序所需的灵活性。
CARMAKER Application 就是一个APO的例子。carmaker可以被连接到多个clients,例如IPGControl, IPGMovie等。
APO communication work
APO Broker Daemon
APO broker daemon (代理守护;守护进程) 是在服务器所在的每台主机上运行的应用程序。每台主机只需要一个代理。代理的主要作用是维护在代理主机上运行的服务器的当前列表,并在需要时将此信息转发给客户端。
Example of Broker Daemon, Host 1 has a single broker daemon
Server
Need to do:
- Tell local broker daemon that it is alive
- After registering, tell the broker at a regular interval that it is still alive.
- The server must also send the updated variable data, send and receive application defined messages and handle subscription changes.
Client
The client queries all brokers using a broadcast, and receives information about all the servers.
Polling
在计算机科学中,轮询(Polling)是一种处理输入/输出(I/O)的技术。在轮询中,设备或者程序会定期检查其他设备或者程序的状态,以判断是否有数据可用或者是否需要进行某种操作。
在 IPG CarMaker 的 APO (Application Platform Online) 框架中,轮询也被用于处理数据的接收和发送。轮询模式下,Client程序会定期(按照预定的时间间隔或者在特定的时刻)向Broker发送请求,以获取最新的数据。 如果Broker有新的数据可用,它会将这些数据发送给Client。否则,Client可能会接收到一个空的响应或者一个特定的信号,表示没有新的数据。
使用轮询的优点是可以确保Client能够定期获取到最新的数据,并且可以在某些程度上控制数据的接收频率。然而,轮询也有一些缺点,例如可能会导致一些不必要的请求(当没有新的数据可用时),并且可能会引入一些延迟(因为Client必须等待下一个轮询时刻才能获取新的数据)。
Quantities (Variables) 变量
Quantities or Variables 由服务器 server 定义和更新,由客户端 client 读取。以CarMaker为例
一个Quatities(如速度或方向盘角度)将由运行中的CarMaker车辆模型(server)修改,并发送给要求了解该量的任何client(例如IPGControl)。
请求在指定时间间隔内发送一定数量的客户端被称为 "订阅 "了该变量。变量订阅在 APO functions section 进行了描述。
APO Function
对于APO Function的描述和介绍,可以看另一篇博客。
APO Funtions