Найти - Пользователи
Полная версия: В Twisted transport.write глючит
Начало » Network » В Twisted transport.write глючит
1
Naota
Такая фишка. Клиент-сервер работает через twisted.internet.protocol.Protocol. Когда сервер отвечает на запрос клиент, transport.write, первый раз в процедуре-ответа, то сообщение тут же отправляется, вызывая второй раз и больше, transport.write игнорируется. Подскажите что делать!!!! АААА!!!
Naota
Сделал мелкий клиент-сервер, работает… Пока думаю..
Naota
Нашел!
server.py
from twisted.internet import reactor, protocol
import cPickle
class DD(protocol.Protocol):
    def connectionMade(self):
        print '%s connection made' % self.transport.client[0]
    def dataReceived(self, data):
        print '%s data received' % self.transport.client[0]
        hello = cPickle.loads(data)
        self.transport.write(cPickle.dumps(hello+'1'))
        self.transport.write(cPickle.dumps(hello+'2'))
    def connectionLost(self, reason):
        print '%s connection lost' % self.transport.client[0]
if __name__ == '__main__':
    factory = protocol.ServerFactory()
    factory.protocol = DD
    reactor.listenTCP(2222, factory)
    reactor.run()
client.py
from twisted.internet import reactor, protocol
import cPickle
class DDClient(protocol.Protocol):
    def connectionMade(self):
        print 'connection made'
        self.transport.write(cPickle.dumps('hello'))
    def dataReceived(self, data):
        print 'data received'
        print cPickle.loads(data)
        print data
    def connectionLost(self, reason):
        print 'connection lost'
if __name__ == '__main__':
    factory = protocol.ClientFactory()
    factory.protocol = DDClient
    reactor.connectTCP('localhost', 2222, factory)
    reactor.run()
Вот такая канетель, распаковывает ток первой, но если не распаковывать, то выводит всё. Мож я туплю гдет жестоко?
Naota
Отказался от твистеда. Неудобная штука, куча функций, проще свой написать. И написал на основе asyncore.
Ferroman
Весёлый монолог :)
А можно подробнее про твистед? Что было так неудобно?
NuINu
дело прошлое, но всетаки…
на клиенте надо:
    def dataReceived(self, data):
print 'data received'
out = StringIO.StringIO(data)
print cPickle.load(out)
print cPickle.load(out)
out.close()
print data
иначе pickle будет читать вашу строку всегда с начала.
потому и не работает.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB