RTP之COMP

2022-12-05 15:53:07 浏览数 (2)

Message Channel是一种基于Socket的面向连接的通信机制。Task以Message的形式交换数据,Message的大小和格式可变,一旦建立连接,它们可以在全双工模式下来回传递

单机模式的Message Channel基于COMP实现,其速度略慢于Message Queue,但具有显著的优势(应用程序的可移植性,以供多节点Message Channel使用等),支持Kernel/RTP之间的Task通信

COMP(Connection-Oriented Message Passing)协议使用标准的Socket API,Domain为AF_LOCAL,Type为SOCK_SEQPACKET

COMP基于连接,类似于TCP,携带变长消息,类似于UDP,但是使用时并不依赖TCP/IP协议栈。它使用一个类似于文件路径的string做为地址,地址格式必须是/comp/socket/0xabcd,abcd为十六进制数,取值范围是0x1 - 0xffff,即1 - 65535

要想使用COMP,在VIP中包含组件INCLUDE_UN_COMP_SHOW,然后使用Socket API即可:socket()、bind()、listen()、accept()、connect()、read()、write()、send()、recv(),以及getsockopt()、setsockopt()、ioctl(),还有select()

send()就是在write()的基础上增加了一个flag: MSG_EXP,类似于Message Queue里的MSG_PRI_URGENT

recv()就是在read()的基础上增加了两个flag: MSG_PEEK和MSG_DONTWAIT

getsockopt()/setsockopt()支持四种Option: SO_SNDBUF、SO_RCVBUF、SO_SNDTIMEO、SO_RCVTIMEO

ioctl()支持两种Function Code: 类似于MSG_PEEK的FIONREAD和类似于MSG_DONTWAIT的FIONBIO

查看COMP连接,使用unstatShow()

简单对比一下Message Channel和Message Queue

Message Channel

Message Queue

面向连接

非面向连接

双向

单向

Message长度可变

Message长度固定

Message数量无限制

Message数量固定

位置透明

Public Object支持RTP通信

使用Socket API

专用API

支持IO操作:select()/read()/write/ioctl()/close()

不支持IO操作

0 人点赞