2013-05-07 2 views
4

im new для python и im, ищущего способ отправки данных с сервера на клиент. У меня есть программа мониторинга серверов, работающих на сервере, и хотел послать уведомление питона клиенту через питона серверкак отправлять данные с сервера на клиент, используя python twisted?

это код сервера

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() 

до сих пор я обнаружил, что если клиент отправляет сообщение, сервер отвечает на это сообщение, но есть ли способ отправлять данные только тогда, когда данные доступны клиенту, не ожидая ответа клиентов?

ответ

2

Этот сервер не отправляет ответы на сообщения клиентов. Он отправляет сообщение, когда клиент подключается. Если это не то, что вы хотите, попробуйте позвонить transport.write в другой обработчик событий.

Если это путано, попробуйте подумать об определении, когда вы хотите, чтобы сервер отправлял данные клиенту.

Вы хотите, чтобы он отправлял данные каждые пять минут?

Вы хотите, чтобы он отправлял данные при выходе дочернего процесса на сервер?

Вы хотите, чтобы оно было отправлено, когда администратор нажимает кнопку на сервере?

После того, как вы выясните, какое событие должно инициировать передачу данных, вам нужно всего лишь ввести вызов transport.write в метод или функцию, обрабатывающие это событие.

+1

О, спасибо за объяснение, которое положило меня на правильный путь –

1

Вы можете сделать это с помощью AMP, который является протоколом в Twisted.

Смежные вопросы