Как написать асинхронное витое приложение для связи клиент-сервер с помощью txredis - PullRequest
0 голосов
/ 20 января 2012

Я хочу использовать redis для данных таблицы лидеров моей игры, и я видел в одном из вопросов Stackoverflow, что txredis является хорошим вариантом для этого.Однако я не могу найти ни одного примера, который мог бы заставить меня начать писать некоторые коды.Кто-нибудь может мне помочь?Знаете ли вы какой-нибудь сайт с примерами?Буду признателен за вашу помощь.

Я пытаюсь сделать что-то подобное, однако это не работает.TCP-клиент подключается, но когда он отправляет «i: xxx», он немедленно отключается:

from twisted.internet.protocol import Protocol, Factory
from twisted.internet import reactor
from twisted.internet import defer
from txredis.protocol import Redis
from twisted.internet import protocol

# Hostname and Port number of a redis server
HOST = 'localhost'
PORT = 6379

@defer.inlineCallbacks


def main():
    clientCreator = protocol.ClientCreator(reactor, Redis)
    redis = yield clientCreator.connectTCP(HOST, PORT)    
    res = yield redis.ping()
    print res

    info = yield redis.info()
    print info

    res = yield redis.set('test', 42)
    print res

    test = yield redis.get('test')
    print test



class LeaderBoard(Protocol):
        def connectionMade(self):
            self.factory.clients.append(self)
        clientCreator = protocol.ClientCreator(reactor, Redis)
        redis = yield clientCreator.connectTCP(HOST, PORT)
    def connectionLost(self, reason):
        print "client removed",self
        self.factory.clients.remove(self)
    def dataReceived(self, data):
        defer.inlineCallbacks
        a = data.split(':')
        if len(a) > 1:
            command = a[0]
            content = a[1]

            res = yield self.redis.set('test', 42)
            print res            

            msg = ""
            score = ""

            if command == "i":
                self.name = content
                msg = self.name + " has joined"

                print msg
            elif command== "msg":
                msg = self.name + ": " + content
                self.message(msg)
    def message(self, message):
        self.transport.write(message + '\n')

if __name__ == "__main__":

    factory = Factory()

    factory.protocol = LeaderBoard
    factory.clients = []

    reactor.listenTCP(80, factory)
    print "Iphone Chat server started"
    reactor.run()`

1 Ответ

0 голосов
/ 20 января 2012
  1. Google для "txredis"
  2. Нажмите на первую ссылку, проект txredis на github
  3. Нажмите на первую запись в исходном браузере, «примеры»
  4. Нажмите на первую запись в браузере исходного кода, "demo.py"
...