То, что я сделал, не использует Очередь, но я иллюстрирую код, который отправляет строку после установления соединения. Существует множество материалов для печати, которые помогут вам понять, что происходит.
Обычный импортный материал:
from twisted.web import proxy
from twisted.internet import reactor
from twisted.internet import protocol
from twisted.internet.protocol import ReconnectingClientFactory
from twisted.protocols import basic
from twisted.python import log
import sys
log.startLogging(sys.stdout)
Вы создаете протокол, полученный из линейного приемника, устанавливаете разделитель.
В этом случае я просто пишу строку «www» после установления соединения.
Главное - взглянуть на интерфейс протокола по адресу twisted.internet.interface.py и понять различные методы протокола и то, что они делают и когда они вызываются.
class MyProtocol(basic.LineReceiver):
#def makeConnection(self, transport):
# print transport
def connectionLost(self, reason):
print reason
self.sendData = False
def connectionMade(self):
print "connection made"
self.delimiter = "\n"
self.sendData = True
print self.transport
self.sendFromQueue()
def sendFromQueue(self):
while self.sendData:
msg = dataQueue.get()
self.sendLine(msg)
# you need to handle empty queue
# Have another function to resume
Наконец, фабрика протоколов, которая будет создавать экземпляр протокола для каждого соединения.
Посмотрите на метод: buildProtcol.
class myProtocolFactory():
protocol = MyProtocol
def doStart(self):
pass
def startedConnecting(self, connectorInstance):
print connectorInstance
def buildProtocol(self, address):
print address
return self.protocol()
def clientConnectionLost(self, connection, reason):
print reason
print connection
def clientConnectionFailed(self, connection, reason):
print connection
print reason
def doStop(self):
pass
Теперь для подключения используется соединитель:
reactor.connectTCP('localhost', 50000, myProtocolFactory())
reactor.run()
Я запустил это и подключил его к серверу, который просто печатает то, что он получает, и, следовательно, не отправляет подтверждение обратно. Вот вывод:
1286906080.08 82 INFO 140735087148064 __main__ conn_made: client_address=127.0.0.1:50277
1286906080.08 83 DEBUG 140735087148064 __main__ created handler; waiting for loop
1286906080.08 83 DEBUG 140735087148064 __main__ handle_read
1286906080.08 83 DEBUG 140735087148064 __main__ after recv
'www\n'
Recieved: 4
Приведенный выше пример, если не отказоустойчив. Чтобы восстановить соединение в случае потери соединения, вы можете получить фабрику протоколов из существующего витого класса - ReconnectingClientFactory.
В Twisted есть почти все инструменты, которые вам понадобятся:)
class myProtocolFactory(ReconnectingClientFactory):
protocol = MyProtocol
def buildProtocol(self, address):
print address
return self.protocol()
Для дальнейшего использования
Предлагаю вам прочитать: http://krondo.com/?page_id=1327
[Отредактировано: согласно комментарию ниже]