我正在使用Python编写程序,考虑使用本地客户端-服务器模型,但我正在努力找出服务器与客户端之间最佳通信方式。一个简单的、预设好的解决方案是最好的——我不想重新发明轮子。以下是我对这个程序的需求:
- 在Linux上运行
- 服务器和客户端在同一系统上,因此不需要通过网络。
- 延迟不会对交互用户造成烦恼。
- 多个客户端可以连接到同一个服务器。
- 客户端独立于服务器启动,可以随时连接/断开连接。
- 客户端数量可测量为几十个;我不需要高度扩展性。
- 客户端可以有几种不同的类型:
- 流读取器——读取连续的数据流(实际上,这都是文本)。
- 状态读取器——读取每隔一段时间更新的某些状态信息。
- 写入器——向服务器发送一些数据,在每次发送后接收一些响应。
客户端类型1似乎很简单;它是一个单向的愚笨的管道。客户端类型2更有趣。我希望避免定期轮询服务器以检查新数据,因为这会为用户增加明显的延迟。服务器需要一种方式来向所有相关客户端发出信号,而不是其他客户端,以便客户端可以从服务器接收更新后的状态信息。客户端类型3必须是双向的;它将向服务器发送用户提供的数据,并在每次发送后接收某种响应。
我查看了Python的IPC页面(http://docs.python.org/2/library/ipc.html),但我认为那些解决方案都不适合我的需求。子进程模块完全不合适,其他所有东西都比我想要的低级别。
类似的问题Efficient Python to Python IPC并不完全相同;我不需要传输Python对象,我对我将拥有的客户端数量的CPU效率并不特别担心,我只关心Linux,而且那个问题的答案对我来说也没有什么帮助。
更新:
我不能接受只指向框架/库/模块/工具的答案,而没有实际给出如何用于我的三种不同的服务器-客户端关系的解释。如果你说:“所有这些都可以使用命名管道完成!”我必须问:“怎么做?”代码片段是理想的,但高级别的解决方案描述也可以。