Найти - Пользователи
Полная версия: Общение между юзерами (Twisted)
Начало » Web » Общение между юзерами (Twisted)
1 2
Shyt_nik
Здравствуйте!
Помогите разобраться пожалуйсто

# -*- coding: utf-8-*-
from twisted.internet.protocol import Factory, Protocol
class Ret(Protocol):
    def connectionMade(self):
        print "соединение установлено"
        
    def connectionLost(self, reason):
        print "Соединение разорвано "
    
    def dataReceived(self, data):
        print "Полученные данные", data
        self.writeData(str(data))
            
    def writeData(self, data):
        self.transport.write(data)
    
class MyFactory(Factory):
    protocol = Ret
        
if __name__ == '__main__':
    from twisted.internet import reactor
    reactor.listenTCP(843, MyFactory())
    reactor.run()

Как мне сделать соединение между юзерами
Вот к примеру чат - (сверху пример) вот клиент оправил сообщение оно пришло (без обработки просто) я его отдал, но он отдал только тому кто прислал а как его раздать другим?

p.s мои пример с официального сайта
s0rg
Вот пример
Shyt_nik
Здравствуйте! s0rg
Пример нечего не говорит, это когда познаешь тогда поимешь но смысла от него потом уже и нет )

Меня интересует как происходит связь, как сервер запоминает юзеров, под чем под аипишниками или какие то значения им дает и если он их сохраняет, то где их искать и нужно ли клиенту завершать соединение после отдачи данных или он должен продолжать весеть
s0rg
Shyt_nik
под чем под аипишниками или какие то значения им дает и если он их сохраняет, то где их искать и нужно ли клиенту завершать соединение после отдачи данных или он должен продолжать весеть
Тогда вот это
Shyt_nik
Спасибо! ответ глобальный, у меня есть такая книга ) прочитал что то не совсем нашел ответы на именно этот вопрос, хотя она вроде еще на анг за этого может и не понял
PooH
Shyt_nik
Пример нечего не говорит, это когда познаешь тогда поимешь но смысла от него потом уже и нет )
А в чем проблема то? По этому примеру
factory создает на каждое соединение по экземпляру MyChat, после его создания вызывает connectionMade, при потери соединения вызывает у него connectionLost и удаляет. У factory создали атрибут clients - список для хранения всех соединений. В connectionMade экземпляр регистрируется в нем, в connectionLost удаляет себя из списка. Фабрика доступна в экземплярах MyChat через атрибут factory. На получение нового сообщения в lineReceived экземпляр обходит все экземпляры из self.factory.clients и вызывает метод message для передачи сообщения. Вроде просто
bw
> как сервер запоминает юзеров, под чем под аипишниками или какие то значения им дает и если он их сохраняет, то где их искать

Как сделаешь, так и будет. В указанном примере это происходит в фабрике (она одна на всех) в списке `clients`. Это нормальный пример, хотя “список” можешь куда угодно запихать, главное тут что фабрика общая для всех соединений. Соединения отождествляются с протоколами и сохранение их доступными это твоя забота, а не Twisted (если не брать в расчёт готовые реализации всяких там протоколов, типа ssh).

> нужно ли клиенту завершать соединение после отдачи данных или он должен продолжать весеть

Очень странный вопрос, в чём он собственно заключается? Не нужно соединение – закрывай, нужно – оставляй открытым, вроде просто :-). Сейчас попробую включить экстрасенса. Кажется получилось. Это что бы сервер получил посланные данные? Можно сразу закрывать соединение: `transport.loseConnection()`

..bw
Shyt_nik
спасибо s0rg книга и правда хорошая я что то видать вначале ее просто проигнорировал

bw
я не занимался раньше серверной частью и не знаю
Shyt_nik
есть еще какие нить книги по twisted полезные?

# -*- coding: utf-8-*-
from twisted.internet.protocol import Factory, Protocol
class Ret(Protocol):
    def __init__(self, factory):
        self.factory = factory
        
    def connectionMade(self):
        self.factory.numConnections += 1
        
    def connectionLost(self, reason):
        self.factory.numConnections -= 1
    
    def dataReceived(self, data):
        pass
class MyFactory(Factory):
    numConnections = 0
    
    def buildProtocol(self, addr):
        return Ret(self)
if __name__ == '__main__':
    from twisted.internet import reactor
    reactor.listenTCP(8000, MyFactory())
    reactor.run()


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


p.s если кто решит помочь серьезно, отблагадарю
s0rg
Нет в вашем примере обмена сообщениями не происходит, в таком виде приложение просто считает количество подключений увеличивая переменную numConnections при соединении (connectionMade) и уменьшая при потере клиента (connectionLost)
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