Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Сети > Теория. Проект клиент-сервер.


Автор: andrew_121 22.5.2009, 21:26
Всем доброго времени суток!
Есть проект-задача. Вкратце.
Обрывок из ТЗ:
Цитата

1. Реализовать программу сервера под Linux:
1.1.    Сервер должен выдержать не меньше 5000 клиентов;
1.2.    Сервер поддерживает возможность распределения нагрузки и отказоустойчивости (серверов может быть больше 1, используют одно хранилище);
1.3.    Тип подключения клиентов к серверу согласовать с заказчиком;

Какой протокол использовать?

Автор: Lazin 22.5.2009, 21:47
Цитата(andrew_121 @  22.5.2009,  21:26 Найти цитируемый пост)
Сервер должен выдержать не меньше 5000 клиентов;

зависит от того, что эти клиенты будут делать, какой объем данных передавать и как сервер их будет обрабатывать

Цитата(andrew_121 @  22.5.2009,  21:26 Найти цитируемый пост)
Сервер поддерживает возможность распределения нагрузки и отказоустойчивости (серверов может быть больше

тоесть это будет кластер?

Цитата(andrew_121 @  22.5.2009,  21:26 Найти цитируемый пост)
используют одно хранилище

я думаю тебе нужен серевер БД, в этом случае ты сможешь добиться масштабируемости, если твои сервера, которые будут обрабатывать данне не будут использовать файловую систему, а будут хранить все данные в БД

а вообще сложно что-то советовать, когда так мало информации, опиши в общих чертах приложение?

Автор: azesmcar 22.5.2009, 21:59
Цитата(andrew_121 @  22.5.2009,  21:26 Найти цитируемый пост)
Какой протокол использовать?

Самый простой и легкий (в плане размера сообщений) smile 
протокол пишут исходя из передаваемы данных а не исходя из количества клиентов которые с ним будут работать. Кстати еще вопрос - что значит "какой протокол"? Предполагается использовать стандартный протокол?

Автор: andrew_121 23.5.2009, 02:51
Цитата(azesmcar @  22.5.2009,  21:59 Найти цитируемый пост)
Предполагается использовать стандартный протокол? 

Я думал либо на основе P2P, либо изменить UDP.

Автор: azesmcar 23.5.2009, 09:00
andrew_121
А..в этом смысле..
в отличие от TCP, UDP не гарантирует доставку пакета, если это устраивает - UDP быстрее. Зависит от задачи, если это к примеру онлайн радио - UDP вполне сойдет, так как немного потерь данных песню Укупкника не испортят. smile 

Автор: Lazin 23.5.2009, 09:58
andrew_121, так что сервер должен делать для каждого клиента?

Автор: MAKCim 23.5.2009, 10:33
Цитата(andrew_121 @  22.5.2009,  21:26 Найти цитируемый пост)
Какой протокол использовать?

не думаю, что стОит выбирать что-то отличное от TCP (это что касается транспортного протокола)
хотя зависит от того, что должен делать сервер и важна ли целостность данных
если ответы точно не известны, то однозначно TCP, чтобы избежать гемороя в будущем

если Linux, то однозначно epoll как low-level механизм работы с сокетами

Цитата(andrew_121 @  22.5.2009,  21:26 Найти цитируемый пост)
1.2.    Сервер поддерживает возможность распределения нагрузки и отказоустойчивости (серверов может быть больше 1, используют одно хранилище);

если HTTP/HTTPS, то обычный редиректинг
иначе свой протокол выше L4, но ниже L5
например, получаем запрос от клиента, сервер редиректит его другому серверу посредством отправки соответствующего сообщения в рамках протокола

что касается 5000, то стОит прочитать The c10k problem

Автор: andrew_121 23.5.2009, 14:44
Цитата(MAKCim @  23.5.2009,  10:33 Найти цитируемый пост)
хотя зависит от того, что должен делать сервер и важна ли целостность данных

Сервер общается с клиентами маленькими сообщениями. Да, целостность данных важна!

Цитата(MAKCim @  23.5.2009,  10:33 Найти цитируемый пост)
что касается 5000, то стОит прочитать The c10k problem 

Пока не знаю что это, но нагуглю.

Автор: fry 24.5.2009, 01:31
Может чтонибудь вроде MPI или PVM запрячь (раз кластер). ХЗ.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)