从Twisted客户端发送到Twisted服务器,仅此一种方式

2024-06-02 07:31:17 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

class Send(Protocol):

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

我很确定,这是一个很好的方法。;—)

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


Tags: 数据方法self服务器应用程序概念客户端内容
2条回答

不,那绝对不是正确的方法。永远不要打电话给doWrite。在

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

但是,假设有一个阻塞的“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)

这是另一个使用UDP/Multicast在服务器和客户端之间进行通信的问题

我也建议一些额外的阅读和twisted文档的例子。在

相关问题 更多 >