Форум программистов, компьютерный форум, киберфорум
Python: Сети
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 29.12.2013
Сообщений: 13
1

Идентификация клиента в twisted

20.05.2015, 23:36. Показов 1668. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет! Я пишу сервер с использованием twisted. К серверу могут подключаться несколько клиентов, сервер может принимать от них сообщения и обрабатывать их. Результат должен отправлять только одному клиенту. Сразу после установления соединения клиент присылает на сервер строку вида “ima:name”, где в качестве name используется UserID. Нужно как-то идентифицировать клиент-ресивер по UserID, чтобы сервер мог знать, кому отправлять сообщения. Первое, что пришло в голову - запомнить номер клиента при подключении:
Python
1
2
num = len(self.factory.clients)-1
 print "this client is", num
Но клиенты могут подключаться и отключаться, номер клиента в self.factory.clients может меняться. Как решить проблему идентификации клиента-ресивера?
Далее привожу участок кода, отвечающий за подключение клиентов к серверу и обработку соообщения с UserID.
Python
1
2
3
4
5
6
7
8
9
10
11
12
class IphoneChat(Protocol):
    def connectionMade(self):
        self.factory.clients.append(self)
        print "clients are ", self.factory.clients
    def dataReceived(self, data):
        a = data.split(':')
        command = a[0]
        content = a[1]
        if command == "iam":
            self.name = content
            msg = self.name + " has joined"
            print msg
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.05.2015, 23:36
Ответы с готовыми решениями:

идентификация клиента
Здравствуте! вот мне тут нужно решить задачку, прошу помощи. Суть задачки следующая имеется...

Идентификация com клиента
Добрый день, в общем такая проблема, есть out-proc com сервер(opc), к которому подключаются...

Идентификация клиента сервером
Как сервер точно может отличить разных клиентов с одним IP,чтобы переслать ему ответ(т.е. какой еще...

Nio идентификация клиента по каналу SocketChannel
Здравствуйте. Голову сломал окончательно, но так и не удалось выяснить как по каналу сервер может...

Идентификация клиента при связке INDY + SSL в событии IdHTTPServerCommandGet
Итак, имеем проект для взаимодействия по SSL протоколу с ключевыми компонентами IdHTTP:...

1
21 / 34 / 14
Регистрация: 23.07.2014
Сообщений: 148
05.07.2015, 01:27 2
сделай clients словарем, ключ собственно идентификатор, значение протокол
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class IphoneChat(Protocol):
 
    def connectionMade(self):
        print "clients are ", self.factory.clients
 
    def connectionLost(self, reason):
        if self.name in self.factory.clients:
            del self.factory.clients[self.name]
 
    def dataReceived(self, data):
        a = data.split(':')
        command = a[0]
        content = a[1]
        if command == "iam":
            self.name = content.strip()
            msg = self.name + " has joined"
            self.factory.clients[content] = self
            print(msg)
 
class IphoneFactory(Factory):
    def __init__(self):
        self.clients = {}
можно чуть по другому, добавить поле instances для протокола, и уже отслеживать по instance.name в self.__class__.instances, но со словарем в factory намного проще и удобнее.
0
05.07.2015, 01:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.07.2015, 01:27
Помогаю со студенческими работами здесь

Twisted debugging
Наверняка кто-то сталкивался с подобной проблемой Возникла необходимость отдебажить код, в...

Twisted таймаут соединений
Здравствуйте! Пишу серверное приложение на python с использованием twisted. К сожалению не могу...

Socket или Twisted?
Всем привет, ищу лучшее решение для задачи: Есть 3 компьютера, им надо достигнуть консенсуса между...

Ищу разработчика Python/Twisted
Обязанности: Поддержка, развитие и разработка нового софта на Python для парковочного...

Twisted Metal или её аналог для PC
Подскажите, пожалуйста, игру подобную Twisted Metal, или хороший эмулятор PS3, что бы запустить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru