Linux IPC多个带守护进程的客户端

时间:2012-12-04 21:33:55

标签: linux ipc

这是非常基本的,但我现在正在消隐。

我有一个守护程序进程,并希望有多个客户端能够与它通信。我希望客户端能够启动然后使用共享库,实质上是“注册”守护进程。守护进程将为此新客户端生成一个线程,并在客户端和新线程之间提供通信管道。

我认为unix数据报套接字是所有客户端最初使用然后切换到特定于客户端的通道的“注册通道”,但是我们无法弄清楚如何在不设置它们的情况下为新数据报套接字创建唯一名称先天。

  • 服务器和客户端在同一台机器上,更喜欢使用数据报套接字来处理将流分解为数据包。
  • 将来回发送(非常)高速率的小消息。

2 个答案:

答案 0 :(得分:3)

如果您愿意,可以完全避免命名客户端套接字的问题。每个客户端都可以使用socketpair()创建一对连接的套接字。然后客户端发送其中一个 通过众所周知的“注册通道”向服务器提供套接字描述符。然后,服务器和客户端有一对私有的,连接的,未命名的套接字,用于通信。

套接字描述符使用sendmsg()发送到服务器并填写msg的控制消息。

这两个答案有一些相关的信息/链接:

How would I use a socket to have several processes communicate with a central process?

Sending file descriptor over UNIX domain socket, and select()

答案 1 :(得分:2)

基本上我认为你需要妥协并且有一个2阶段的过程,SOCK_STREAM套接字作为阶段1,SOCK_DGRAM作为阶段2。 所以它会是这样的:

服务器:

  1. 创建SOCK_STREAM套接字“my.daemon.handshake”
  2. 接受客户
  3. 将随机生成的字符串XXX发送给客户端并关闭 socket
  4. 创建一个SOCK_DGRAM套接字“my.daemon.XXX”并启动 处理它
  5. 重复(2)
  6. 客户端

    1. 连接到套接字“my.daemon.handshake”
    2. 读取到EOF - 获取值XXX
    3. 开始与套接字“my.daemon.XXX”上的服务器通信

    4. 利润!!!!