在看使用libevent的时候,它里面有一个创建socketpair对的函数
先分析一下什么是SocketPair.
首先搞明白,在我们平时单个客户端和服务端TCP通信的时候,需要三个socket才能做到能够全双工通信,什么?三个,是的没错!
一个客户端client ,一个服务端server, 一个accepter; 一开始client 连接server,server在接受client连接的时候,产生一个accepter,专门负责与client通信. 好了,我们SocketPair就到此完了,我们只需要把client ,accepter 保存起来,server关闭掉,就完成socketpair对创建.
client,accept是啥?其实就是两个数字,在同一机器上,有了这两个数字就可以在任何的进程,线程相互的收发消息,想想都很爽!因为在不同线程,进程收发消息是不需要加锁,随便弄!(消息粘包自己处理好就行),类似于QT里面信号槽机制,消息我发了,至于谁收,做什么处理,我不管,是不是很好的解耦合!
至于性能上,我做过音视频解码到播放使用这个方案处理线程通信都没问题.更多的就没测试了. 看图更清晰
最后附上封装的 Tcp库,也可以到gitee上