簡體   English   中英

如何使用python將數據從服務器發送到客戶端?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM