Python 网络编程抽象、分解

Python 网络编程抽象、分解,python,networking,network-programming,twisted,Python,Networking,Network Programming,Twisted,我有一个问题如下: 服务器进程1 不断向数据存储发送更新 服务器进程2 客户机联系服务器,服务器查询数据存储并返回结果 问题是,进程1和进程2发回客户机的结果是完全不同和不相关的 如何分解? 您是否只有一个进程不断地发送数据,并将协议定义为具有与返回类型是1还是2相对应的位 你有两个过程吗?那么他们如何共享数据存储(它只是一个结构而不是一个数据库) 谢谢 为什么不使用数据库而不是“一个结构”?关系数据库和非关系数据库都提供了许多实际优势(使用它们的独立进程、负责复制[[和/或快照、备份,

我有一个问题如下:

服务器进程1

  • 不断向数据存储发送更新
服务器进程2

  • 客户机联系服务器,服务器查询数据存储并返回结果
问题是,进程1和进程2发回客户机的结果是完全不同和不相关的

如何分解? 您是否只有一个进程不断地发送数据,并将协议定义为具有与返回类型是1还是2相对应的位

你有两个过程吗?那么他们如何共享数据存储(它只是一个结构而不是一个数据库)


谢谢

为什么不使用数据库而不是“一个结构”?关系数据库和非关系数据库都提供了许多实际优势(使用它们的独立进程、负责复制[[和/或快照、备份,…])、丰富的功能(如果“查询”需要),等等)


最坏的情况是,“只是一个结构”可以由完全专用于它的第三个进程来处理(基本上模仿任何DB引擎提供的功能——尽管引擎可能会做得更好更快;-),这样至少可以保持良好的分解(两个服务器进程都与“数据存储进程”交互).

如果您可以限制自己使用Twisted,我建议您使用。它本质上是一个RPC系统,不太关心“客户端”和“服务器”的概念——TCP连接的发起方或响应方都可以在PB中启动RPC调用


因此,服务器1将接受回调对象的注册调用,并在有新数据可用时调用回调。服务器2根据客户端的需要提供各种RPC操作。如果它们在同一个数据上运行,我会将两台服务器放在一个进程中。

听起来您想在“某处”流式传输一系列INT,并将它们收集到数据存储中。在我的系统中,我将传感器读数流式传输到数据库中,并允许它们直接进入网络客户端,为它们提供实时的电力读数。我写了一篇关于为什么a的博客文章,尽管它非常适合保存数据以供以后分析

我希望第一个服务器进程是一个twisted服务器,用于将INT流式传输到。任何需要实时数据的客户端都可以订阅RabbitMQ中的流,也可以使用Txamp。Web浏览器客户端可以使用

在您的设计中,服务器1将保存到数据库中。您可以让server3从RabbitMQ收集数据并将其流式传输到数据库。我计划有一个服务器,收集数据块并渲染图形以存储到中心文件共享


不要创建自己的消息传递系统,RabbitMQ经过了良好的测试,可扩展,如果出现问题,它可以保存您的“消息”(原始数据)。

我希望没有人会抓住这一点,因为我说的是“数据存储”。数据库非常不适合此应用程序。把它想象成一个整数数组,它们在变化,服务器必须发送它们的变化,用户可以请求对数组进行一些复杂的计算。@Dev
*
3,不管怎样--我仍然建议您花一个过程来照料和喂养那个商店(因此,从本质上讲,对它的访问也是串行化的,这是一个安全的选择——如果您需要一些重叠的访问,那么您可以享受实现范围锁定、R vs W和数据存储过程的多线程的乐趣;-)。然后将数据存储为一个进程范围的全局变量?这或多或少就是我现在使用Twisted时要走的道路。你能给我举一个通过网络使用回调的例子吗?客户端不也必须充当RPC服务器吗?现在我正按照你说的做,除了客户端有两个线程,一个只是阻塞s从服务器1接收数据,第二个用于向服务器2发送RPC调用。我只能在服务器端使用Twisted,这是否限制了我使用直接TCP?@devdevdevdev:要获得PB的真实示例,请查看buildbot(buildbot.net).构建从属服务器登录到主服务器;然后RPC通过单个TCP连接向两个方向移动(允许调用位于防火墙或NAT后面的从属服务器)如果客户端不是用Python编写的,你必须通过TCP来翻滚自己的RPC协议。我建议使用TLV编码。这是我最初的想法,但是没有健壮的STOP客户端在iPhone上运行。如果你在iPhone上工作,你不需要一个STOP库,那么你想要的是一个C++ AMQP客户端库,就像txAMP是python的库一样。通过谷歌搜索找到一个你喜欢的库。