Уведомления

Группа в Telegram: @pythonsu

#1 Июль 29, 2013 12:41:47

Shyt_nik
Зарегистрирован: 2012-05-25
Сообщения: 22
Репутация: +  0  -
Профиль   Адрес электронной почты  

Общение между юзерами (Twisted)

Здравствуйте!
Помогите разобраться пожалуйсто

# -*- 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 мои пример с официального сайта

Офлайн

#2 Июль 30, 2013 16:49:54

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Общение между юзерами (Twisted)

Офлайн

#3 Июль 31, 2013 12:50:50

Shyt_nik
Зарегистрирован: 2012-05-25
Сообщения: 22
Репутация: +  0  -
Профиль   Адрес электронной почты  

Общение между юзерами (Twisted)

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

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

Офлайн

#4 Июль 31, 2013 15:53:59

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Общение между юзерами (Twisted)

Shyt_nik
под чем под аипишниками или какие то значения им дает и если он их сохраняет, то где их искать и нужно ли клиенту завершать соединение после отдачи данных или он должен продолжать весеть
Тогда вот это

Офлайн

#5 Июль 31, 2013 17:59:03

Shyt_nik
Зарегистрирован: 2012-05-25
Сообщения: 22
Репутация: +  0  -
Профиль   Адрес электронной почты  

Общение между юзерами (Twisted)

Спасибо! ответ глобальный, у меня есть такая книга ) прочитал что то не совсем нашел ответы на именно этот вопрос, хотя она вроде еще на анг за этого может и не понял

Офлайн

#6 Авг. 1, 2013 05:16:57

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Общение между юзерами (Twisted)

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



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Отредактировано PooH (Авг. 1, 2013 05:18:20)

Офлайн

#7 Авг. 2, 2013 08:41:09

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

Общение между юзерами (Twisted)

> как сервер запоминает юзеров, под чем под аипишниками или какие то значения им дает и если он их сохраняет, то где их искать

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

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

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

..bw



Офлайн

#8 Авг. 2, 2013 14:41:29

Shyt_nik
Зарегистрирован: 2012-05-25
Сообщения: 22
Репутация: +  0  -
Профиль   Адрес электронной почты  

Общение между юзерами (Twisted)

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

bw
я не занимался раньше серверной частью и не знаю

Отредактировано Shyt_nik (Авг. 5, 2013 18:40:15)

Офлайн

#9 Авг. 5, 2013 18:39:47

Shyt_nik
Зарегистрирован: 2012-05-25
Сообщения: 22
Репутация: +  0  -
Профиль   Адрес электронной почты  

Общение между юзерами (Twisted)

есть еще какие нить книги по 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 если кто решит помочь серьезно, отблагадарю

Офлайн

#10 Авг. 5, 2013 18:45:53

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Общение между юзерами (Twisted)

Нет в вашем примере обмена сообщениями не происходит, в таком виде приложение просто считает количество подключений увеличивая переменную numConnections при соединении (connectionMade) и уменьшая при потере клиента (connectionLost)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version