4

我是 python 新手,我正在寻找一种将数据从服务器发送到客户端的方法。我有一个服务器监控程序在服务器上运行,并想通过 python 服务器向 python 客户端发送通知

这是服务器代码

from twisted.internet.protocol import Protocol, Factory
from twisted.internet import reactor
import time

class Server(Protocol):

    def connectionMade(self):
        self.transport.write("data to client")

factory = Factory()
factory.protocol = Server
reactor.listenTCP(8789, factory)
reactor.run()

客户代码

from twisted.internet.protocol import Protocol, ClientFactory
from sys import stdout
from twisted.internet import reactor

class printData(Protocol):
    def dataReceived(self, data):
        stdout.write(data)

class ClientFactory(ClientFactory):
    def startedConnecting(self, connector):
        print 'connecting'

    def buildProtocol(self, addr):
        print 'Connected.'
        return printData()

    def clientConnectionLost(self, connector, reason):
        print reason

    def clientConnectionFailed(self, connector, reason):
        print reason

if __name__ == '__main__':
    reactor.connectTCP('localhost', 8789, ClientFactory())
    reactor.run()

到目前为止,我发现如果客户端发送消息,服务器会回复该消息,但是有没有办法只在客户端可以使用数据而不期望客户端响应时才发送服务器数据?

4

2 回答 2

2

此服务器不向客户端消息发送回复。当客户端连接时,它会发送一条消息。如果这不是您想要的,请尝试调用transport.write不同的事件处理程序。

如果这令人困惑,请尝试考虑定义您希望服务器何时将数据发送到客户端。

您希望它每五分钟发送一次数据吗?

你希望它在服务器的子进程退出时发送数据吗?

您希望它在管理员单击服务器上的按钮时发送吗?

在确定应该触发数据发送的事件之后,您需要做的就是将transport.write调用放入处理该事件的方法或函数中。

于 2013-05-07T18:29:25.740 回答
1

您可以使用 AMP(Twisted 中的一种协议)来执行此操作。

于 2014-07-27T08:34:41.247 回答