使用TwistedPython的多个通信通道

使用TwistedPython的多个通信通道,python,tcp,twisted,Python,Tcp,Twisted,我目前正在研究Twisted框架,作为实现基于网络的备份应用程序的一种方式,我想实现一些我在网上找不到的例子 我计划使用实现该系统,但我还需要一种将二进制文件从客户端传输到服务器的方法。我希望能够调用PB上的方法,然后使用某种UID通过单独的数据通道发送文件 拥有这两个独立的通信通道的原因是,我想让客户端成为多线程(一个线程扫描目录树,另一个线程将更改的文件传输到服务器) 这可能是扭曲的吗?我已经读到,在一个反应器上有多个线程调用方法是个坏消息,那么这个架构注定要失败吗 我将非常感谢任何指向正确

我目前正在研究Twisted框架,作为实现基于网络的备份应用程序的一种方式,我想实现一些我在网上找不到的例子

我计划使用实现该系统,但我还需要一种将二进制文件从客户端传输到服务器的方法。我希望能够调用PB上的方法,然后使用某种UID通过单独的数据通道发送文件

拥有这两个独立的通信通道的原因是,我想让客户端成为多线程(一个线程扫描目录树,另一个线程将更改的文件传输到服务器)

这可能是扭曲的吗?我已经读到,在一个反应器上有多个线程调用方法是个坏消息,那么这个架构注定要失败吗

我将非常感谢任何指向正确方向的指针,正如我提到的,我仍在研究可能性——但我计划在这个项目中使用Django,因此Python是必须的

拥有这两个独立的通信通道的原因是,我想让客户端成为多线程(一个线程扫描目录树,另一个线程将更改的文件传输到服务器)

这种推理不成立。您可以在一个套接字上运行一个协议,即使您有一个线程在文件系统中徘徊,寻找要做的工作

但是,可能有其他原因希望在客户端和服务器之间发送不同于元数据或其他结构化数据的文件数据。然而,我想到的主要问题是,您可能不想强制命令等待文件完成,PB的
FilePager
类解决了这个问题

如果要在Twisted using应用程序中使用线程,则需要记住的主要一点是,无论何时,只要要从任何线程“除了”运行反应器的线程调用Twisted API,就必须使用
reactor.callFromThread
(或仅基于该方法构建的API,例如
twisted.internet.threads.blockingCallFromThread


callFromThread
将一些工作(以要调用的对象的形式)发送到reactor线程,reactor将安排在那里“很快”调用它。从错误线程调用的任何其他扭曲API都将有未定义的结果。

完美。我不知道
FilePager
类的存在,尽管我遇到了一些基于
StringPager
的复杂实现。我现在有一个基本的传输正在工作,所以看起来这是一个不错的选择!谢谢。