|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
10.10.2014, 20:43 | #1 |
Пользователь
Регистрация: 10.10.2014
Сообщений: 12
|
Распознавание(идентификация) клиентов
Доброго времени.
Ситуация: много клиентов одновременно подключены к серверу. Проблема: идёт много сообщений, в реалтайме, нужно определить, чьи они(как можно быстрее), чтобы обработать пакет соответствующим образом. Варианты решения:
Вот примерно такая каша у меня в голове, прошу помочь, подсказать идеи или развеять сомнения, заранее спасибо. Последний раз редактировалось .AJIADb9; 10.10.2014 в 22:37. Причина: выделил основную проблему жирным |
10.10.2014, 21:32 | #2 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
Все три решения, что вы предложили решают разные проблемы.
Чем отличается обработка одного клиента от обработки другого клиента? Может обработка одна и та же а вам нужно найти клиента, который прислал сообщение? Какой язык - С или С++? |
10.10.2014, 22:25 | #3 | |
Пользователь
Регистрация: 10.10.2014
Сообщений: 12
|
Цитата:
Обработка зависит от пришедшего пакета(по факту одна и та же), и да, мне лишь нужно как можно быстрее принять пакет и понять, от кого он, впоследствии обработав. Последний раз редактировалось .AJIADb9; 10.10.2014 в 22:27. Причина: уточнение |
|
10.10.2014, 22:43 | #4 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
При первоначальном подключении клиента создайте к нему объект-обработчик и потом сохраните привязку сокета к этому объекту через std::map.
Потом когда прочитаете данные из сокета в map найдете объект обработчик. |
10.10.2014, 22:47 | #5 | |
Пользователь
Регистрация: 10.10.2014
Сообщений: 12
|
Цитата:
что-то я маленько подтупливаю, но всё же, что будет являться объектом-обработчиком? или просто сделать client[ip][port] в котором как раз-таки хранится, например, идентификатор пользователя? |
|
10.10.2014, 23:07 | #6 |
Пользователь
Регистрация: 10.10.2014
Сообщений: 12
|
получится что-то типа если мы запрашиваем client[wrongIP][wrongPort] тогда регистрируем, иначе просто получаем ид клиента
З.Ы. если и выглядит велосипедисто или просто плохо, зато поиск существующего работает (кажется) за хотябы логарифмическую зависимость, нежели сравнение IP и port в лоб (или даже супер-пупер самописным или не очень алгоритмом) |
11.10.2014, 08:11 | #7 | ||
Санитар
Старожил
Регистрация: 04.10.2008
Сообщений: 2,577
|
Цитата:
Цитата:
|
||
11.10.2014, 09:03 | #8 |
Пользователь
Регистрация: 10.10.2014
Сообщений: 12
|
Ох, да, я понимаю, что логарифмическая зависимость это одна из самых быстрых, просто спрашиваю совета, можно ли извернуться, сделав быстрее.
Так бы и сказали: "нет, данный способ самый быстрый из всех, что я знаю и не думаю, что тебе удастся как-то ещё это ускорить" Зачем сразу палками кидаться? Хотя я, кажется, придумал, как это сделать за "единичку" (правда я потеряю немного в памяти, пойду попробую) |
11.10.2014, 09:34 | #9 | ||
Санитар
Старожил
Регистрация: 04.10.2008
Сообщений: 2,577
|
Цитата:
Бьюсь об заклад, на твой сервер не войдет никогда 9999999999999 юзеров (ну потому што это больше населения планеты в дохрена раз). Но двоичный логарифм этого числа равен 43. Т.е. плясать с бубном тут незачем - даже если твой сервер - это вконтакт или гугл. Цитата:
Последний раз редактировалось rrrFer; 11.10.2014 в 09:36. |
||
11.10.2014, 09:52 | #10 | |
Пользователь
Регистрация: 10.10.2014
Сообщений: 12
|
Да там всё просто, лисапед, он и в африке лисапед:
if( user[127][0][0][1][333] == NULL ) Цитата:
|
|
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
База клиентов | Eangwar | Свободное общение | 1 | 17.05.2013 22:48 |
TServerSocket - количество клиентов | Don Karleone | Работа с сетью в Delphi | 10 | 15.02.2012 00:43 |
Идентификация клиентов TClientSockets | ArtGrek | Работа с сетью в Delphi | 2 | 28.02.2011 13:36 |
Запрос активных клиентов | mavlon_m | SQL, базы данных | 4 | 23.02.2011 11:13 |