Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 本地IPC的POSIX消息队列或unix域套接字_Linux_Ipc - Fatal编程技术网

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

Linux 本地IPC的POSIX消息队列或unix域套接字,linux,ipc,Linux,Ipc,我需要在客户端和服务器之间设置本地IPC。这是一个单服务器和多个客户端的情况,数据需要双向交换。客户端是一个发送命令选项的命令,服务器获取数据并将其发送给客户端。客户机在控制台上打印从服务器接收的输出 从命令发送的数据很小,但服务器发送到命令的数据很大(~11Mb)。windows中的现有设计使用命名管道以65KB的块发送数据。服务器需要同时将数据发送到多个命令客户端,因为从不同的终端同时执行具有不同选项的命令是很常见的 我省略了FIFO,因为对于大小大于4096字节的消息,来自多个进程的数据可

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

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

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

考虑以下两个标准,POSIX消息队列或unix域套接字哪个更好

  • 消息的大小(65K)
  • 来自多个客户端的数据不应交错。客户机只应接收发往该客户机的数据 如果你需要更多的细节,请告诉我


    你好,Rohini Chandra听起来你想要个插座。使用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);
        }
      }
    

    谢谢你的建议,丹尼尔。您能告诉我您希望unix域套接字最好满足哪一个条件吗。我是为了学习而问的。套接字将自动分离不同的客户端数据流。每次客户端连接时,服务器都会创建一个新的临时套接字,并将原始服务器套接字保留给新客户端使用。对于消息队列,您必须实现自己的分离。另外,套接字使用POSIX标准的read()和write()系统调用,因此维护人员更容易理解。谢谢Daniel。我认为,由于Linux消息队列在打开消息队列时提供了一个文件描述符,因此我们可以为每个客户机提供一个新的描述符。但是为了让它工作,我认为操作系统应该像windows命名管道一样支持这种分离。我不确定Linux消息队列是否能处理这个问题。虽然每个客户端都有自己的消息队列描述符,但它始终是同一个队列。因此,当服务器将数据写入队列时,您的客户机在将消息从队列中删除之前必须知道消息是否是针对他们的,因为所有客户机都从同一队列中读取。