让多个客户端在Python中显示最新信息?

让多个客户端在Python中显示最新信息?,python,network-programming,Python,Network Programming,我对网络编程不熟悉,但对Python很熟悉。我有一个简单的吸墨纸程序,可以在多台客户端计算机上使用。吸墨纸有两种工作方式,它可以显示和更新数据库中的信息。为了避免任何记事本显示旧数据,如何使所有记事本在另一个记事本更新数据库中的某些数据后立即从数据库中重新获取信息 我更希望避免设置一些客户机-服务器协议的复杂性。是否可以创建某种形式的客户端专用协议,当其他吸墨器需要更新其信息时,将简单的刷新消息直接传递给其他吸墨器?您可以使用触发器。当信息更新时,向所有吸墨器发送一个信号(取决于您选择的方式,可

我对网络编程不熟悉,但对Python很熟悉。我有一个简单的吸墨纸程序,可以在多台客户端计算机上使用。吸墨纸有两种工作方式,它可以显示和更新数据库中的信息。为了避免任何记事本显示旧数据,如何使所有记事本在另一个记事本更新数据库中的某些数据后立即从数据库中重新获取信息


我更希望避免设置一些客户机-服务器协议的复杂性。是否可以创建某种形式的客户端专用协议,当其他吸墨器需要更新其信息时,将简单的刷新消息直接传递给其他吸墨器?

您可以使用触发器。当信息更新时,向所有吸墨器发送一个信号(取决于您选择的方式,可能只是一个udp数据包),该信号将随之更新其信息。Postgresql可以使用python编写脚本。

要接收消息(例如,其他海报建议的UDP包或http请求),客户端必须在客户端计算机上运行基本服务器。例如,可以使用Python xmlrpc模块。但是,本地防火墙可能会阻止内部通信

如果客户端数量适中,最简单的解决方案是经常轮询数据库以进行更改:在图形表中添加“上次修改时间”列,并让客户端检查此字段。这样,客户机就可以在不浪费太多资源的情况下确定是否需要重新加载图形


编辑:最后一个修改字段可以由更改图形的客户端主动更新,也可以由数据库触发器自动更新。

python脚本的当前逻辑是什么?我真的不明白这个问题。更改的频率是多少?所有吸墨纸的数据集是否相同?Blotter从数据源或多个值的新数据集记录一个参数?你能详细说明一下信息的性质吗?所有吸墨纸的数据集都是一样的。吸墨器可以随时更新数据库中任意数量的数据。但是,更改的频率不是很高,更改之间的间隔是几分钟而不是几秒钟。有一个问题,我可以在每个客户端(计算机)上运行一个套接字服务器(我假设这就是您所指的)吗?难道我不需要有一个套接字服务器,然后是许多可能的套接字客户端吗?服务器监听套接字上的传入连接,客户端进行这些连接。当然,您可以用Python实现单个服务器,并从每个客户机重复连接到该服务器,以查看是否有来自另一个客户机的消息,但您也可以对数据库执行同样的操作。为了避免频繁的连接,您需要不同的体系结构:图形应用程序实例侦听传入的连接,并在收到消息时更新其图形。在启动时,他们必须订阅新闻馈送,例如,将他们的地址添加到数据库表中。在您的实现中,还考虑如果客户端宕机或无法到达,消息无法传递会发生什么。也许这就是为什么另一张海报建议使用UDP(而不是TCD)。但是,请注意,UDP包可能会丢失。除非有很好的理由反对,否则我会选择“上次修改时间”解决方案。上次修改的解决方案可能是最巧妙的,但它也涉及轮询,即数据不会实时更新,并且会有很多不必要的数据库查询。我不介意套接字解决方案的代码开销。使用套接字是最容易做到的,还是应该考虑其他框架,比如Twisted?有什么好的代码示例吗?在这个特定的应用程序中,套接字将很容易,因为消息非常短。看看,在一个单独的线程中运行receiver循环(它在等待时阻塞),并向GUI发送重画事件,而不是打印消息。或者,回答收到消息的服务器,让服务器每隔20毫秒重复一次消息,因为UDP包可能丢失。(在第二次没有应答后,服务器应假定客户端已关闭。)