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

时间:2010-09-16 21:25:32

标签: python networking twisted

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

如何通过事件驱动的Twisted概念实现这一目标?我目前使用connectionMade的{​​{1}}方法,但我不认为这是正确的方法。

Protocol

我很确定,这是的方式。 ; - )

加成: 我的问题是,我无法想象使用什么事件。我认为class Send(Protocol): def connectionMade(self): while True: data = queue.get() self.transport.write(data + "\n") self.transport.doWrite() 事件不正确,但在我的情况下,我永远不会到达connectionMade以外的任何其他事件,因为服务器不会向客户端发送任何内容。我应该改变这种行为吗?

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:1)

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

我还会建议一些额外的阅读和自己扭曲的文档中的例子。