2013-04-15 2 views
7

Я разрабатываю программу, которая должна запускаться на интернет-серверах (базовый компонент, который будет использоваться несколькими кросс-платформенными программами). Я знаком с мерами предосторожности безопасности (например, для предотвращения переполнения буфера и атак SQL-инъекций), но никогда ранее не писал серверную программу или какую-либо программу, которая будет использоваться в этом масштабе.Написание программы для работы на сервере с запросом опытных советов

Программа должна быть способна обслуживать сотни или тысячи клиентов одновременно. Протоколы предназначены для обработки скорости и для минимизации объема данных, которые должны быть обменены, а серверная сторона будет записана на C. Будут и Windows, и версия Linux из того же кода.

Вопросы:

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

У вас нет предложения использовать другой язык. Это решение уже принято, по причинам, по которым я не свободен.

+3

Поскольку «эта программа должна работать в течение нескольких месяцев», это, вероятно, хорошая идея также иметь * отдельный * процесс мониторинга, чтобы перезапустить вашу программу, если он сбой или что-то еще пойдет не так. – Dukeling

+0

"Неконструктивный"? Он состоит из трех практических ответных вопросов, основанных на реальной проблеме, с которой я сталкиваюсь - само определение хорошего вопроса, в соответствии с FAQ. –

+0

Ваш вопрос также должен быть [разумно ограниченным] (http://stackoverflow.com/faq#dontask). – RandomSeed

ответ

2

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

Несмотря на то, что производительность запускается при перезагрузке программы, вы должны иметь возможность справиться с этим, поскольку внешние обстоятельства могут заставить программу к такому перезапуску.

Не пытайтесь изобретать колесо, когда это не нужно, и посмотрите на zeromq или что-то в этом роде, чтобы обрабатывать распределение входящих сообщений. (Если вам разрешено, прототипируйте бэкэнды на более прощающем языке, чем C, как Python, затем переопределите в C, но сохраняйте протокол связи)

+0

Спасибо, ZeroMQ, похоже, именно то, что мне нужно. –

+0

+1 для zeromq. – CloudyMarble

4

Для использования libevent или libev и неблокирующего ввода-вывода. Таким образом, операционная система потребует большинства проблем с расписанием. Я также использовал пул потоков для обработки задач, которые по своей природе блокируют, поэтому они не блокируют основной цикл. И если вам когда-либо понадобится читать или записывать большие объемы данных на диск или с него, используйте mmap, чтобы позволить ОС обрабатывать как можно больше.

Основным советом является использование ОС, насколько это возможно. Если вы хотите хороший пример программы, которая делает это на Varnish, она очень хорошо написана и прекрасно работает.

+0

Спасибо за совет. libevent (и libev) кажутся немного более низкими, чем ZeroMQ (предлагается Anthon), хотя я могу использовать их для других проектов. Я взгляну на лак, похоже, что он разработан так, как мы хотим, чтобы эта программа работала. –

Смежные вопросы