Shyt_nik
Июль 29, 2013 12:41:47
Здравствуйте!
Помогите разобраться пожалуйсто
# -*- 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
Июль 30, 2013 16:49:54
Shyt_nik
Июль 31, 2013 12:50:50
Здравствуйте! s0rg
Пример нечего не говорит, это когда познаешь тогда поимешь но смысла от него потом уже и нет )
Меня интересует как происходит связь, как сервер запоминает юзеров, под чем под аипишниками или какие то значения им дает и если он их сохраняет, то где их искать и нужно ли клиенту завершать соединение после отдачи данных или он должен продолжать весеть
s0rg
Июль 31, 2013 15:53:59
Shyt_nik
под чем под аипишниками или какие то значения им дает и если он их сохраняет, то где их искать и нужно ли клиенту завершать соединение после отдачи данных или он должен продолжать весеть
Тогда вот это
Shyt_nik
Июль 31, 2013 17:59:03
Спасибо! ответ глобальный, у меня есть такая книга ) прочитал что то не совсем нашел ответы на именно этот вопрос, хотя она вроде еще на анг за этого может и не понял
PooH
Авг. 1, 2013 05:16:57
Shyt_nik
Пример нечего не говорит, это когда познаешь тогда поимешь но смысла от него потом уже и нет )
А в чем проблема то? По
этому примеруfactory создает на каждое соединение по экземпляру MyChat, после его создания вызывает connectionMade, при потери соединения вызывает у него connectionLost и удаляет. У factory создали атрибут clients - список для хранения всех соединений. В connectionMade экземпляр регистрируется в нем, в connectionLost удаляет себя из списка. Фабрика доступна в экземплярах MyChat через атрибут factory. На получение нового сообщения в lineReceived экземпляр обходит все экземпляры из self.factory.clients и вызывает метод message для передачи сообщения. Вроде просто
> как сервер запоминает юзеров, под чем под аипишниками или какие то значения им дает и если он их сохраняет, то где их искать
Как сделаешь, так и будет. В указанном примере это происходит в фабрике (она одна на всех) в списке `clients`. Это нормальный пример, хотя “список” можешь куда угодно запихать, главное тут что фабрика общая для всех соединений. Соединения отождествляются с протоколами и сохранение их доступными это твоя забота, а не Twisted (если не брать в расчёт готовые реализации всяких там протоколов, типа ssh).
> нужно ли клиенту завершать соединение после отдачи данных или он должен продолжать весеть
Очень странный вопрос, в чём он собственно заключается? Не нужно соединение – закрывай, нужно – оставляй открытым, вроде просто :-). Сейчас попробую включить экстрасенса. Кажется получилось. Это что бы сервер получил посланные данные? Можно сразу закрывать соединение: `transport.loseConnection()`
..bw
Shyt_nik
Авг. 2, 2013 14:41:29
спасибо s0rg книга и правда хорошая я что то видать вначале ее просто проигнорировал
bw
я не занимался раньше серверной частью и не знаю
Shyt_nik
Авг. 5, 2013 18:39:47
есть еще какие нить книги по 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
Авг. 5, 2013 18:45:53
Нет в вашем примере обмена сообщениями не происходит, в таком виде приложение просто считает количество подключений увеличивая переменную numConnections при соединении (connectionMade) и уменьшая при потере клиента (connectionLost)