7

我正在用 Python 编写一个程序,我正在考虑使用本地客户端-服务器模型,但我正在努力找出服务器与客户端通信的最佳方式。一个简单的、固定的解决方案是最好的——我不想重新发明轮子。这是我对这个程序的需求:

  • 在 Linux 上运行
  • 服务器和客户端在同一个系统上,所以我不需要通过网络。
  • 对交互式用户来说不太可能烦人的延迟。
  • 多个客户端可以连接到同一台服务器。
  • 客户端独立于服务器启动,可以随时连接/断开连接。
  • 客户数以数十计;我不需要扩展得很高。
  • 客户可以有几种不同的口味:
    1. 流阅读器 - 读取连续的数据流(实际上,这都是文本)。
    2. 状态阅读器 - 读取一些不时更新的状态信息。
    3. Writers - 向服务器发送一些数据,每次都会收到一些响应。

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

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

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

更新:

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

4

1 回答 1

3

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

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

于 2013-03-06T22:01:56.637 回答