我是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()
到目前为止,我发现如果客户端发送消息,服务器会回复该消息,但是只有在客户端可以获得数据时才发送服务器数据而不期待客户端响应?
答案 0 :(得分:2)
此服务器不会发送回复客户端消息。它在客户端连接时发送消息。如果那不是你想要的,那么试着在另一个事件处理程序中调用transport.write
。
如果这令人困惑,请尝试考虑定义您希望服务器何时向客户端发送数据。
您希望它每五分钟发送一次数据吗?
您希望它在服务器的子进程退出时发送数据吗?
当管理员点击服务器上的按钮时,您是否希望它发送它?
在确定哪个事件应该触发数据发送之后,您需要做的就是将transport.write
调用放入处理该事件的方法或函数中。
答案 1 :(得分:1)
您可以使用AMP(Twisted协议)执行此操作。