分享一个Linux C++消息通讯框架TCPSHM

因为本人从事行业关系,Linux环境下的低延迟通讯是我关注的技术之一。要达到极端的低延迟,固然同机器内IPC比网络通讯快,而Linux IPC方式中无疑是共享内存延迟最低。不过相对于TCP这种通用的通讯方式来讲,共享内存缺乏了一些控制层的协议,好比进程A和B经过一个基于共享内存的消息队列通讯,A很难知道队列另外一端的B是否存在,具体的说就是基于共享内存的简单消息队列缺乏了链接创建和断开的控制。git

 

另外一方面,相对于SHM(共享内存)来讲,使用TCP也有些本身的痛点:除了延迟之外,重连恢复是个全部应用场景下都不可避免的问题。咱们知道,因为网络问题或进程崩溃,TCP链接断开是很常见的事情,断开前发送方发出的数据可能没有被接收,也可能接收了还没被处理接收方就挂了,因此为了确保不丢失信息,发送方的应用程序须要保存已发送的信息,即便本身并不须要,等收到对方的确认消息才能丢弃。也就是说,一个真正可靠的TCP应用程序须要作不少无关业务的控制层的事情。而这个问题SHM并不存在,只要机器不掉电,程序的崩溃与重启对于SHM是透明的,也就是说崩溃前已写入且未读取的数据还会在那里,程序重启后不需作任何数据重传之类的事情。github

 

因而我想,若是TCP和SHM分别弥补了上述各自的缺点,那么它们使用起来将会及其类似:就像一个带链接属性的持久化消息队列,用户能够像操做一个普通消息队列同样push和pop消息,对于发送方来讲已经push的消息不须要本身保存副本,对于接受方来讲没有pop的消息不会丢失,同时双方都能知道对方是否还活着。这样一个抽象的消息队列能够基于TCP,以支持远程通讯,也能够基于SHM, 以提供超低延迟,这对于用户来讲能够彻底透明。网络

 

TCPSHM就是这样一个解决方案。TCPSHM是一个Linux下的轻量级高性能的C++模板类库开源项目,提供了客户端和服务端的框架,同时高度可配置和可定制。欢迎感兴趣的同窗了解一下,并提出宝贵的意见,谢谢~框架

连接:https://pan.baidu.com/s/1v5gm7n0L7TGyejCmQrMh2g 提取码:x2p5

免费分享,可是X度限制严重,如若连接失效点击连接或搜索加群 群号744933466tcp

相关文章
相关标签/搜索