何时使用Fifo上的套接字进行客户端 - 服务器IPC?

时间:2017-09-05 10:40:59

标签: linux sockets ipc named-pipes

现在看了一段时间的代码,我看到大多数编码器都使用了IPC over Pipes(或者FIFO是特定的)套接字。

考虑到只有一个客户端和一个服务器,使用FIFO over socket是不是更好? 请教我这件事。

2 个答案:

答案 0 :(得分:1)

FIFO有以下好处:

  • 如果数据len小于PIPE_BUF
  • ,它们是写入的原子 使用SPLICE_F_MOVE(没有用户空间数据复制内核将在管道之间移动数据)
  • splice几乎是garanted
  • 与套接字相比,它们更容易设置

但另一方面它是单向的,即你很可能需要2个独立的fifo:

  • 用于将数据从客户端写入服务器
  • 用于将数据从服务器写入客户端

或者使用一个fifo但是根据需要重新打开它,即在服务器上获取数据 - 在服务器上重新打开fifo WR_ONLY,在客户端重新打开fifo RD_ONLY,在客户端上获取数据,在从服务器读取数据后反之亦然。

http://man7.org/linux/man-pages/man7/pipe.7.html

答案 1 :(得分:1)

  • 插座是双向的,管道/ fifo是单向的。
  • 套接字可以是流或数据报,pipe / fifo总是流。
  • Socket和fifo不需要相关进程,而未命名的管道则需要。
  • 套接字可以处理多个对等体。