[英]how send data from server to client using python twisted?
我是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()
到目前為止,我發現如果客戶端發送一條消息,服務器會回復該消息,但是當數據可供客戶端使用而不期望客戶端響應時,是否只能發送服務器數據?
此服務器不會發送對客戶端消息的回復。 它在客戶端連接時發送消息。 如果那不是您想要的,那么嘗試在不同的事件處理程序中調用transport.write
。
如果這令人困惑,請嘗試考慮定義何時希望服務器將數據發送到客戶端。
你想讓它每五分鍾發送一次數據嗎?
您希望它在服務器的子進程退出時發送數據嗎?
當管理員單擊服務器上的按鈕時,您是否希望它發送它?
在確定哪個事件應該觸發數據發送之后,您需要做的就是將transport.write
調用放入處理該事件的方法或函數中。
您可以使用AMP執行此操作,AMP是Twisted中的協議。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.