Модераторы: feodorv

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как лучше организовать много-поточный сервер 
:(
    Опции темы
Бонифаций
Дата 29.3.2006, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 827
Регистрация: 15.9.2005
Где: Brisbane

Репутация: нет
Всего: 40



Цитата(YanTsys @ 23.3.2006, 01:54 Найти цитируемый пост)
А нет нигде параметра позволяющего сокету автоматически закрываться в случае если оборвана связь?
Или нужно по таймеру делать опрос всех открытых сокетов на живность?


А зачем? если связь оборвется, вы просто получите ошибку в recv() при приеме. Или сигнал SIGPIPE если будете писать в неисправный сокет.



--------------------
 Бонифаций.
 
PM MAIL ICQ Skype GTalk Jabber YIM   Вверх
040375
Дата 7.4.2006, 04:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 6.4.2006

Репутация: 2
Всего: 2



Если Вы хотите писать многопоточный сервер, и писать будете под Линукс - то Вам лучше всего разобраться с вызовом select, именно с помощью него работает большинство серверов в линукс, т.к. у многопоточной идеи много минусов, рассказывать не буду про них - лучше найдите в инете ман, про select есть даже русский ман и разберитесь с ним. Весь смысл в том, что select "берёт на обслуживание" любое (по теории) кол-во сокетов не блокируя основной цикл программы и экономя ресурсы процессора при таймаутах. У этого вызова есть ещё библиотечная обработка - pselect - это более новая ф-я. Пример приводить не буду пока - их в инете предостаточно, могу позже про выслать по почте.
PM MAIL   Вверх
adonin
Дата 7.4.2006, 08:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 16.12.2005
Где: Новочеркасск Рост овская обл.

Репутация: 1
Всего: 5



Цитата(040375 @ 7.4.2006, 04:43 Найти цитируемый пост)
многопоточной идеи много минусов

Покажите хотя бы один недостаток, чтобы утверждение голословным не было. Вообще говоря, существует только два способа обработки параллельных запросов: многопоточность и ассинхронный ввод/вывод. Остальные методы должны сводиться к одному из них. Итак, select сводится к одному из этих способов, следовательно, обладает его недостатками.
Если я не прав, поправьте меня.
--------------------
Тот, кто слизывает мед с крапивы, платит за него слишком дорого. (Томас ФУЛЛЕР)
PM MAIL   Вверх
adonin
Дата 7.4.2006, 08:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 16.12.2005
Где: Новочеркасск Рост овская обл.

Репутация: 1
Всего: 5



Нашёл статью:
Подходы к организации серверного приложения
Итак, select - это разновидность ассинхронного ввода/вывода и ему присущи недостатки этого метода (см. статью)
Цитата

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

для Linux это лучший вариант.

Это сообщение отредактировал(а) adonin - 7.4.2006, 08:29
--------------------
Тот, кто слизывает мед с крапивы, платит за него слишком дорого. (Томас ФУЛЛЕР)
PM MAIL   Вверх
Necias
Дата 7.4.2006, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 7.4.2006

Репутация: нет
Всего: 2



жабер сервер - опенсорс, под линух, очень прямо написанный, можно работу с сокетами оттуда взять. Если кому интересно - в маздае эта проблема решается порождением класса CSocket в новом потоке. Но сервера с такой "в лоб" реализованной многопоточностью на коммерческом уровне не делаются ибо макс число потоков даже на Крее будет весьма ограниченным. Техника плавающего (до опр числа потоков в каждом изних находится по 1у сокету, затем они заполняются по 2й и тд) распределения сокетов не сложна, но безопасна и эффективна и при реализации многопоточности не следует о ней забывать.
PM MAIL ICQ   Вверх
blur
Дата 5.5.2006, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 126
Регистрация: 9.11.2004

Репутация: 1
Всего: 1



А у меня вот такой вопрос: если к серверу будут подключаться десятки тысяч клиентов, то как в таком случае организовать их работу. Не в отдельный же поток каждого   smile  
PM MAIL   Вверх
cozzzy
Дата 5.5.2006, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 29.4.2006
Где: Харьков

Репутация: нет
Всего: нет



Использовать ACE  smile  
PM MAIL   Вверх
blur
Дата 5.5.2006, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 126
Регистрация: 9.11.2004

Репутация: 1
Всего: 1



Цитата(cozzzy @  5.5.2006,  14:38 Найти цитируемый пост)
Использовать ACE 

Это что?
 
PM MAIL   Вверх
cozzzy
Дата 5.5.2006, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 29.4.2006
Где: Харьков

Репутация: нет
Всего: нет



Цитата(blur @  5.5.2006,  13:50 Найти цитируемый пост)
Это что?

The ADAPTIVE Communication Environment (ACE) 

Фактически - лучшая сетевая библиотека, которой пользуются многие крупнейшие компании. 
Кроссплатформенная, гибкая, защищенная + достаточно легка в изучении и использовании
 
PM MAIL   Вверх
Nuzur
Дата 20.6.2006, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 4.7.2004

Репутация: нет
Всего: 5



cozzzy, А можете в 2-х словах описать как им пользоваться?
А то я чего-то недопонял... Вещица интерестная особенно прочитав кто ею пользуеться... 
Есть ли какое-то опиание сего на русском? 

Это сообщение отредактировал(а) Nuzur - 20.6.2006, 16:05


--------------------
Never again...
PM MAIL   Вверх
Nuzur
Дата 21.6.2006, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 4.7.2004

Репутация: нет
Всего: 5



Не все-таки не смог я АСЕ осилить, буду пользоваться стандартными средствами! 

Это сообщение отредактировал(а) Nuzur - 21.6.2006, 17:02


--------------------
Never again...
PM MAIL   Вверх
Nuzur
Дата 22.6.2006, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 4.7.2004

Репутация: нет
Всего: 5



adonin, Что-то я очень плохо понял ваш пример, тоесть до упора создаються потоки причем потом даже с "пустыми" сокетами. Всем все побарабану, подключился к нему кто-то или нет...
Можете пролить свет на происходящее? 

И код клиента который будет конектиться к такому серверу как бут выглядить? 

Это сообщение отредактировал(а) Nuzur - 22.6.2006, 09:46


--------------------
Never again...
PM MAIL   Вверх
Goryachev
Дата 29.3.2007, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 23.2.2005
Где: Израиль

Репутация: нет
Всего: нет



Цитата(Romikgy @  29.3.2006,  14:28 Найти цитируемый пост)
Имхо в 

Цитата(LuckLess @ 29.3.2006, 12:45 )
nix


нет потоков


А про pthread.h слышали? POSIX threads standard.
Работает отлично в nixe.

Для компиляции, используйте -lpthread флаг

Это сообщение отредактировал(а) Goryachev - 29.3.2007, 16:52
PM MAIL   Вверх
Owen
Дата 30.3.2007, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 5.7.2006
Где: Русь

Репутация: нет
Всего: нет



Под 'nix'ом не писал, но  почему не использовать такое явление, как порты завершения?( CreateIOCompletionPort( ) ) Это будет вполне логично, в случае если сервер расчитан на большое кол-во пользователей.

Создавать потоки на каждый сокет имеет смысл лишь в том случае, если ожидается сравнительно мелое количество пользователей. На мой взгляд около 20. Однако от многопотоковости отказываться не стоит. Просто распределить обработку данных на несколько потоков. Особенно продуктивно в многопроцессорных машинах.
PM ICQ   Вверх
SenkraD
Дата 6.4.2007, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 3.2.2006
Где: Украина::Киев

Репутация: 1
Всего: 23



Могу вывесить свой курсач по Linux - это HTTP - сервер. Там несколько вариантов работы сервера и через fork, и через потоки, и через пул потоков.

Если надо пиши!


--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.1046 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.