问题标签 [twisted.internet]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
108 浏览

python - 如何从与他不同的文件中调用 Twisted reactor?

我有一个很可能属于 Twisted 或可能与 Python 直接相关的问题。

我的问题,另一个与 Twisted 中的断开连接过程有关。正如我在本网站上所读到的,如果我愿意,我必须执行以下步骤:

  1. 服务器必须停止监听。
  2. 客户端连接必须断开。
  3. 服务器连接必须断开。

根据我在上一页上阅读的内容,第一步必须运行该stopListening方法。

在网络中提到的示例中,所有操作都在同一个脚本中执行。使访问不同的变量和方法变得容易。

对我来说,我有一个服务器,一个客户端位于不同的文件和不同的位置。

我有一个创建服务器并分配协议的函数,并希望从另一个文件中的客户端协议对停止连接器的方法进行 AMP 调用。

call AMP 调用 SendMsg 命令。

CredAMPServerFactory 类分配相应的协议。

在“CredReceiver”类中,我有一个将协议分配给 TestServer 类的调用。我这样做是为了使用 AMP 方法“响应程序”进行调用。

我的问题是,当我进行调用时,程序会响应错误,指示连接器不属于 CredReceiver 属性对象。

我怎么能这样做?有谁知道类似的例子可能会注意到?

谢谢你。

编辑。

服务器端:

server_amp.py

  1. 启动一个反应器:reactor.listenSSL(1234, pf, contextFactory = sslContext,)从 SATNETServer 类中。

  2. 也从 SATNETServer 类中将协议分配pfCredAMPServerFactory属于模块 server.py 的类。

服务器.py

  1. 在类内将类CredAMPServerFactory分配CredReceiver给协议。
  2. 一旦建立连接,就会将类SATNETServer分配给协议。

客户端:

客户端放大器

  1. 调用SendMsg属于SATNETServer该类的方法。
0 投票
1 回答
1947 浏览

python - Twisted:将数据写入同一个套接字后如何从客户端套接字读取?

我正在尝试编写一个简单的 TCP 服务器,它必须按顺序执行以下操作:

  1. 客户端连接到服务器,并且KEEPALIVE此连接的标志设置为 1。
  2. 服务器从客户端接收数据。
  3. 然后它计算作为列表的响应。
  4. 然后服务器将列表中的每一项逐一发送,同时等待来自客户端的显式 ACK,即,在发送列表中的单个项目之后,服务器等待来自客户端的 ACK 数据包,并且只有在收到 ACK 之后它是否继续以相同的方式发送其余项目。

以下是代码:

在运行服务器和客户端时,我得到以下异常:

Resource temporarily unavailable

我了解此异常的原因 - 我正在尝试在非阻塞套接字上调用阻塞方法。

请帮助我找到解决此问题的方法。

0 投票
0 回答
361 浏览

python - 错误回调后重启 LoopingCall 任务

我的 LoopingCall 任务在执行错误回调时停止,我想重新启动它。

我的代码看起来像这样,但我不确定我做得对还是最好的方法

然后现在在我的错误回调中我这样做......

这是正确的方法吗?它会进入递归错误循环吗?

0 投票
2 回答
97 浏览

python - 以 Twisted Python 发送数据时的事件?

我正在使用 Twisted 框架编写 TCP/IP 服务器。我正在发送非常大的数据流,小块。所以我需要知道我发送的数据何时通过 Twisted 的缓冲区并进入操作系统,并且操作系统已准备好接收更多数据。有没有办法在发生这种情况时得到通知?

我这样做是为了测量网络吞吐量,所以我正在生成无限量的数据。

如果我使用的是普通套接字(不是 Twisted),答案是使用 poll() 和 POLLOUT,但我想使用 Twisted 来做到这一点。

0 投票
1 回答
269 浏览

python - 了解 Twisted 和异步编程。为什么一个代码有效而另一个无效?

对不起,首先是文字墙。我一般很难理解 Twisted 和异步编程。

我正在使用带有 Twisted 15.4.0 的 Python 2.7。

我为 downloadPage()尝试了这个示例,它运行良好。

我对其进行了一些修改,将回调从 lambda 更改为正确的函数。有效。我还尝试从回调和 errback 中删除 reactor.stop() 语句,它的唯一影响是脚本在下载后不会停止。这是有道理的,因为事件循环仍在运行。

我还尝试提供一个损坏的 URL。

如果我只有一次调用 downloadPage(),程序会阻塞。它不会触发 errback。

如果我有两个调用,一个带有损坏的 URL,一个带有正确的 URL,它会运行、完成并触发回调(我假设是正确的)并终止。

我的第一个问题是:为什么会发生这种情况?为什么不为损坏的 URL 触发 errback?损坏的 URL 不应该引发错误吗?


我有一个单独的代码,看起来像这样:

此代码不起作用。它打印“1”,打印“2”,但没有回调或 errback 调用。该页面也没有下载到“foo”。

我的第二个问题是:为什么这段代码不起作用?是因为While循环吗?如果是这样,while 循环如何影响延迟和它的回调链?


编辑 1:我将“While True”更改为“While 条件”,在 3 次迭代后终止。现在下载文件并调用回调。为什么无限循环会干扰下载?

此外,我在 While 循环中的“# Do some other non twisted stuff”行执行从管道读取。这是我获取网址的地方。

我可以连续阅读我的网址并在下载完成时安排回调的最佳方式是什么?


编辑2:我将代码更改为这样的:

我将代码的结构更改为这样的想法 callWhenRunning() 将继续调用 receive_some_data 函数(就像一个无限循环)。它没有。

如何让事件循环继续调用此函数?


编辑 3:设法使这个工作有点。我发现了循环调用方法。我每隔 x 秒使用循环调用从Edit 2调用我的代码。有用。还有其他方法吗?


谢谢!

0 投票
1 回答
428 浏览

python - 理解 Python Twisted Looping Call - 保存 LoopingCall 函数的返回

我正在使用 Twisted 并每隔 x 秒进行一次循环调用。

我用于循环调用的函数会生成一个 return 语句。

如何检索 f 的返回结果?

谢谢!

0 投票
0 回答
266 浏览

python - Twisted Python - 两个循环调用,一个不根据给定间隔触发

我有一个结构如下的程序:

f1 有一些处理一些阻塞操作的延迟。像这样的东西:

f2 做一些记录。它没有扭曲的代码。

无论 f1 发生什么,我都希望 f2 每 10 秒记录一次。

然而,这种情况并非如此。f2 的调用间隔非常大,从 50 秒到 2 秒不等。

为什么会这样?

编辑1:

根据要求,f2 代码:

f2 是一个对象的方法,但是这个对象是一个助手,它实际上并不执行操作。对象 f2 是更多的数据持有者的一部分。

编辑 2

因此,记录时间 (f2) 与 f1 所需的时间直接相关。如果 f1 需要 30 秒,从开始到结束,日志 (f2) 之间的时间也将是 30 秒。不应该在 f1 等待 some_blocking_operation() 时调用 f2 吗?

编辑 2 的附录:

问题显然是 f1 的结果,因为如果我评论对 f1 的循环调用,f2 的循环调用可以正常工作(每 10 秒记录一次)。

我将添加更详细的 f1 草图以更好地说明我在做什么。

编辑 3:

这是 f1 中发生的事情的更详细的草图。

工作流程是这样的:

  1. 从管道获取输入( read 是非阻塞的,它不应该影响 f2 )
  2. 假设输入是一个列表。对列表中的每个元素做一些事情。
  3. 对列表的每个元素所做的“某事”是一个阻塞操作。然而,这是一个相当短的时间,通常不超过 0.5 到 1 秒。
  4. 完成该操作后,如果没有发生错误,则触发第二个回调,该回调执行另一个阻塞操作。这通常需要 1 到 2 秒。
  5. 写入输出管道

每个单独的阻塞操作都需要一点时间。我开始推测这是一种复合效应。每个input都有 50 个项目,所以如果每个项目需要 1 到 2 秒才能完成,那么我得到的记录时间就会开始有意义。

但是,我的问题仍然存在,当输入中的项目执行阻塞操作时 f2() 不应该触发吗?

编辑 4

好的,所以我恢复到我知道有效的版本。回调过去每 10 秒触发一次。现在,它没有。这真的很奇怪。我认为输入中项目的大小可能与此有关。

0 投票
2 回答
538 浏览

python - Python SSH 服务器(twisted.conch)命令过滤和端口转发

我需要创建一个 SSH 服务器(已选择 twisted.conch 来完成这项工作),它会执行以下操作:

  1. 执行端口转发(附加代码不这样做,我不知道要修改什么)
  2. 在执行命令之前过滤命令(或至少在之前或之后记录它们)。

下面附加的代码创建了一个完美的 SSH 和 SFTP 服务器,但它缺少一个主要组件 - 端口转发(和命令过滤,但这不如端口转发重要)

我搜索了可能的地方,但找不到这两个..请帮帮我,-这是拼图的最后平静。

0 投票
1 回答
454 浏览

python - 如何在 Twisted 线程之外处理数据

我正在尝试编写一个 UDP 侦听器,该侦听器执行 API 调用作为响应,但基于接收到的 UDP 数据报中包含的数据。看来 callMultipleInThreads 在单个线程中运行这两个函数。收到 UDP 数据报后,我希望 functionOne 会在 functionTwo 在新线程中启动时结束(执行 API 调用),但事实并非如此。

我是编写线程代码的新手。如何更好地允许第二个功能不阻止 functionOne 关闭?在 funtionTwo 中分叉 API 调用会是更好的方法吗?

0 投票
1 回答
466 浏览

python - 如何使高速公路/扭曲的websocket服务器重新启动/异常后熬夜

我有一个使用高速公路的 websocket 服务器,它在其中运行一些代码 onMessage。

在这段代码中发生了一个异常,我执行了一个 try/except 子句,这样我就可以记录错误,它会正确记录。但是与客户端(javascript)的连接断开。

问题是,如果我加载一个新页面,它不会重新连接到 websocket 服务器。我试图将代码块放在一个while循环中启动服务器,但客户端没有成功连接。

有谁知道如何做到这一点,即使“onMessage”中的代码有异常,websocket 服务器将继续接受连接并为其他客户端提供运行的机会?