本地 IPC 的 POSIX 消息队列或 unix 域套接字

roh*_*dra 5 linux ipc

我需要在客户端和服务器之间设置本地 IPC。这是单服务器多客户端的情况,需要双向交换数据。客户端是发送命令选项的命令,服务器获取数据并将其发送给客户端。客户端在控制台上打印从服务器接收到的输出。

命令发送的数据很小,但服务器发送到命令的数据很大(~11Mb)。Windows 中的现有设计使用命名管道以 65 KB 的块发送数据。服务器需要同时将数据发送到多个命令客户端,因为从不同的终端同时执行具有不同选项的命令是很常见的。

我省略了 FIFO,因为来自多个进程的数据可以交错处理大于 4096 字节的消息。如果我错了,请纠正我。

考虑到以下两个标准,哪个是更好的选择,POSIX 消息队列还是 unix 域套接字?

  1. 消息的大小(65K)
  2. 来自多个客户端的数据不应交错。客户端只应接收寻址到该客户端的数据。

如果您需要更多详细信息,请告诉我。

问候, 罗希尼·钱德拉

Dan*_*her 0

听起来你想要一个插座。使用bind在服务器上设置套接字,然后当每个客户端连接到它时,服务器可以fork来单独处理每个客户端,或者使用select来处理客户端。分叉通常更简单:

  int sock = create and bind the socket to any port

  while (1) {
    int client = accept(sock);
    pid_t pid = fork()
    if (pid == 0) {
       // Handle client command
       exit(0);
    }
  }
Run Code Online (Sandbox Code Playgroud)

  • 虽然每个客户端都有自己的消息队列描述符,但它始终是同一个队列。因此,当服务器将数据写入队列时,您的客户端在将其从队列中删除之前必须知道该消息是否是给他们的,因为所有客户端都从同一个队列中读取。 (2认同)