2017-09-05 98 views
0

查看了一段时间的代码之后,我发现大多数编码器已经使用IPC上的Pockets(或者指定FIFO)的套接字。何时使用Fifo上的套接字用于客户端服务器IPC?

考虑到只有一个客户端和一个服务器,在套接字上使用FIFO不是更好吗? 请在这个问题上教育我。

+0

FIFO更有限,它们不能很好地处理多个同时发生的客户端。 – PSkocik

回答

0

FIFO具有以下优点:

  • 它们的原子写,如果数据len为小于PIPE_BUF
  • 拼接几乎garanted与SPLICE_F_MOVE工作(没有用户空间中的数据复制内核将移动管之间的数据)
  • 他们更容易建立与插座

但在另一方面,它是单向的,即比较,你最有可能需要2个独立的FIFO:

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

或者使用一个FIFO,但重新打开它需要即获取服务器上的数据 - 重新FIFO WR_ONLY在服务器上,在客户端重新打开fifo RD_ONLY,在客户端读取数据并在从服务器读取数据后反过来。

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

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

“套接字缓冲区大小可以更改。”和FIFO和管道缓冲区大小不能改变,我想:) :)? – Maquefel

+0

@Maquefel由于内核2.6.11管道缓冲区的大小可以改变。 –

相关问题