gpt4 book ai didi

python - 从 Twisted 客户端发送到 Twisted 服务器,只有这一种方式

转载 作者:太空宇宙 更新时间:2023-11-04 01:42:18 29 4
gpt4 key购买 nike

我想使用 Twisted 重建现有应用程序的通信部分。这个应用程序确实从客户端向服务器发送数据,只是这样,服务器不发送任何东西。

我如何使用 Twisted 的事件驱动概念来实现这一目标?我目前使用 ProtocolconnectionMade 方法,但我认为这不是正确的方法。

class Send(Protocol):

def connectionMade(self):
while True:
data = queue.get()
self.transport.write(data + "\n")
self.transport.doWrite()

我很确定,这不是做到这一点的方法。 ;-)

添加:我的问题是,我无法想象为此使用什么事件。我认为 connectionMade 事件不正确,但在我的例子中,除了 connectionLost 之外,我永远不会到达任何其他事件,因为服务器不会向客户端发送任何内容。我应该改变这种行为吗?

最佳答案

不,这绝对不是正确的方法。永远不要调用 doWrite

这里的问题是我敢打赌 queue.get() 只会阻塞,直到有一些数据。如果可能,使用非阻塞的消息传递方式而不是线程。例如,让你的线程只是 callFromThread 到你的 Send 协议(protocol)来做一些事情。

但是,假设有一个阻塞的“get”调用,这样的事情可能会起作用:

from twisted.internet.protocol import Protocol
from twisted.internet.threads import deferToThread

class Send(Protocol):
def connectionMade(self):
self.qget()

def qget(self, data=None):
if data is not None:
self.transport.write(data)
deferToThread(queue.get).addCallback(self.qget)

关于python - 从 Twisted 客户端发送到 Twisted 服务器,只有这一种方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3730951/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com