我需要创建多个服务器(至少3个)执行不同的任务,理想情况下我需要一个中央服务器才能与它们通信。我看过插座,它们似乎超出了我的范围。我更习惯使用每个服务器都可以写入的数据库,他们可以在自己之间交换信息,在消息被操作时设置适当的标志。
这是针对将在Raspberry Pi上运行的项目,我希望尽可能保持轻量级。
我正在考虑使用sqlite3,但我不确定这是否是应用程序/进程之间的适当通信形式。 python脚本可以“监听”数据库的更改,还是需要在循环中阻塞,直到找到消息?
答案 0 :(得分:2)
SQLite非常适合在进程之间共享信息,虽然我怀疑它的锁定非常粗糙,因此如果进程频繁更新(许多秒),那么您可能会发现这会影响性能。但是,如果您的进程在不同的计算机上运行,那么您需要为它们安排一些共享存储。由于SQLite依赖于文件锁定,因此NFS等共享文件系统可能存在问题 - 有关详细信息,请参阅their FAQ。
MySQL和PostgreSQL都是明智的选择,允许通过网络进行连接,并且应该让多台机器更容易一次访问数据库,尽管它们需要比SQLite更多的设置。
所有这一切,听起来你真正希望实现的是流程被彼此唤醒,而这种事情对于数据库来说更难。您通常最终不得不频繁地对特定值进行轮询,这是一种非常低效的处理方式。如果您在静态数据存储之后,数据库很棒,但它们并不能替代正确的IPC。如果您不需要发送数据,您可能还会考虑使用UDP而不是TCP,而不仅仅是“唤醒呼叫”。请记住,UDP不保证可靠性,但您可能会发现有关TCP套接字的更多教程和文档,而不是UDP。
如果你不习惯使用原始套接字,你看过0MQ吗?它是一个消息传递系统,可以运行,其中包括套接字。它有Python绑定,它表现得非常好。或许抽象可能比处理原始套接字更适合你?
作为最后一点,套接字编程并不是那么棘手一旦你理解了概念,但它确实有一个学习曲线,直到你对正在发生的事情感到满意为止。如果你想尝试一下,我建议从Python的Socket Programming HOWTO开始。
您将要拥有的主要复杂性是同时处理多个连接。如果您对使用线程感到满意,可以为每个连接生成一个线程(即每个其他机器一个线程),或者您可以将事物保存在同一个线程中,并等待具有{{3的功能的多个连接上发生的事情。模块。
答案 1 :(得分:1)