适用于Linux的灵活IPC解决方案?

use*_*471 7 python linux client-server ipc

我正在用Python编写一个程序,我正在考虑使用本地客户端 - 服务器模型,但我正在努力找出服务器与客户端通信的最佳方式.一个简单的罐装解决方案是最好的 - 我不打算重新发明轮子.以下是我对此计划的需求:

  • 在Linux上运行
  • 服务器和客户端在同一系统上,因此我不需要通过网络.
  • 延迟不太可能让交互式用户烦恼.
  • 多个客户端可以连接到同一服务器.
  • 客户端独立于服务器启动,可以随时连接/断开连接.
  • 客户数量可以测量数十个; 我不需要非常高.
  • 客户可以有几种不同的风格:
    1. 流阅读器 - 读取连续的数据流(实际上,这是所有文本).
    2. 状态读者 - 读取一些状态信息,每隔一段时间更新一次.
    3. 写入者 - 将一些数据发送到服务器,每次都会收到一些响应.

客户类型1似乎很简单; 这是一个单向的哑管.客户端类型2更有趣.我想避免简单地轮询服务器以定期检查新数据,因为这会为用户增加明显的延迟.当状态信息被更新时,服务器需要某种方式向所有且仅向相关客户端发信号,以便客户端可以从服务器接收更新的状态.客户端类型3必须是双向的; 它会将用户提供的数据发送到服务器,并在每次发送后收到某种响应.

我查看了Python的IPC页面(http://docs.python.org/2/library/ipc.html),但我认为这些解决方案中的任何一个都不适合我的需求.子进程模块是完全不合适的,其他一切都比我想要的低一些.

类似的问题Efficient Python to Python IPC并不完全相同; 我不需要传输Python对象,我并不特别担心我拥有的客户端数量的CPU效率,我只关心Linux,而且无论如何这个问题的答案对我都没有帮助.

更新:

我不能接受只是指向框架/库/模块/工具的答案,而不实际解释它如何用于我的三种不同的服务器 - 客户端关系.如果你说,"所有这一切都可以通过命名管道完成!" 我不得不问"怎么样?" 代码片段是理想的,但对解决方案的高级描述也可以起作用.

Dav*_* R. 3

您已经研究过ZeroMQ了吗?它具有出色的 Python 支持,并且文档示例已经涵盖了您的用例。

它很容易在单一平台、单一机器设置上使用,但它可以很容易地扩展到网络。