crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Выбор и реализация типа многопоточности, пул потоков, поток на соединение или один поток
mezmay
  опции профиля:
сообщение 27.11.2012, 23:53
Сообщение #1


Активный участник
***

Группа: Участник
Сообщений: 272
Регистрация: 13.7.2009
Из: Ростов-на-Дону
Пользователь №: 904

Спасибо сказали: 16 раз(а)




Репутация:   1  


Для саморазвития решил написать чат с базой данных, многопоточностью и голосовой связью. Клиенты будут подключаться к серверу и все сообщения посылать через него. Как реализовать многопоточность в данном случае? Хорошо понимаю 2 варианта:

1. Один дополнительный поток. Он все время запущен, принимает коннекты и передает/принимает данные от всех клиентов, пишет в базу.
2. Один поток на каждое соединение. Запущен пока есть коннект, обменивается данными с одним клиентом ну и пишет в общую базу.
3. Хотелось бы услышать советы, ведь оба предложенных варианта нехорошие - первый плох тем, что будет перегружен один поток, а второй плох тем, что количество потоков зависит от количества подключений и может быть неоптимальным. Изучал документацию по пулу потоков в Qt, но так и не понял как его прикрутить к данной задаче, ведь надо сделать чтобы рабочий объект существовал в потоке в течении, как минимум, одного коннекта. Или может сразу создать несколько потоков и клиентов распихивать по ним?...

Сообщение отредактировал mezmay - 27.11.2012, 23:57
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Алексей1153
  опции профиля:
сообщение 29.11.2012, 14:36
Сообщение #2


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


в твоём классе-потоке сервера должен быть список подключенных им сокетов клиентов. Сокеты ты каким-то образом маркируешь - вот по этой метке и найдёшь, кому передать данные
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- mezmay   Выбор и реализация типа многопоточности   27.11.2012, 23:53
- - Алексей1153   можно попробовать так: 1) поток с GUI (основной) ...   28.11.2012, 6:29
- - mezmay   Я все-таки хочу использовать количество рабочих по...   29.11.2012, 13:30
- - Алексей1153   усложнения с настройкой количества потоков - сомни...   29.11.2012, 14:22
- - mezmay   Ну допустим у нас по одному потоку на клиента - пр...   29.11.2012, 14:32
- - Алексей1153   в твоём классе-потоке сервера должен быть список п...   29.11.2012, 14:36
- - mezmay   Да, сокеты хранить и найти нужный не проблема. Но ...   29.11.2012, 14:48
- - Iron Bug   по-моему, тебе лучше разделить потоки на приём и о...   29.11.2012, 18:10
- - Алексей1153   Цитата(mezmay @ 29.11.2012, 17:48) Нельзя...   30.11.2012, 11:11
- - mezmay   Из документации QAbstractSocket: ЦитатаNote: It is...   30.11.2012, 15:26
- - Алексей1153   это сказано о том, что один экземпляр - один сокет...   30.11.2012, 19:56
- - Litkevich Yuriy   Цитата(Алексей1153 @ 30.11.2012, 21:56) 1...   30.11.2012, 20:17
- - Алексей1153   ну, к примеру, это std::vector<uint8_t> или ...   30.11.2012, 20:22
- - mezmay   Чат дорос до бета-версии, установил на работе, вот...   18.12.2012, 15:46
|- - Iron Bug   Цитата(mezmay @ 18.12.2012, 18:46) Чат до...   18.12.2012, 19:04
- - mezmay   Начальник - свой человек, тоже в чате))   18.12.2012, 19:11


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


6 чел. читают эту тему (гостей: 6, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 23.11.2024, 2:41