Как разработать сервер в Windows - PullRequest
3 голосов
/ 10 марта 2012

Я задаю этот вопрос как парень с сильным опытом системного программирования в Linux. У меня очень мало опыта разработки Windows, и до сих пор это ограничивалось программами типа «Консольное приложение».

Каков канонический процесс разработки сервера, зная, что он должен работать в Windows?

Создает ли приложение Windows Service сразу? Действительно ли процесс отладки так отвратителен, как кажется ? Разработчик Windows начинает с приложения командной строки для отладки и преобразует его только в службу для развертывания?

Для сравнения я предложу, чтобы Linux-сервер представлял собой обычную программу командной строки на выбранном языке. Я определю сервер как программу, которая стереотипно,

  1. производит большую часть своей удобочитаемой информации в форме журналов,
  2. принимает ввод от операционной системы (например, события сети или файловой системы), а не «пользователь нажал кнопку» или «пользователь ввел команду», и
  3. развернуто как демон.

Возможно, системные администраторы Windows ожидают, что совершенно другие интерфейсы будут запускать, останавливать и управлять серверами. Я абсолютно открыт для этого; Я просто еще не видел всей этой стороны.

$ ./my-server &
Starting...
$ head /var/my-server.log
2012-3-10 14:34:43.934 [info] Server started! Waiting for connection from client
$ 

Ответы [ 2 ]

3 голосов
/ 12 марта 2012

Во-первых: да, почти всегда предпочтительно, чтобы сервер в Windows был реализован в качестве системной службы. Тем не менее, это дополнительный бонус, если сервер также можно запустить из командной строки для устранения неполадок.

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

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

Здесь есть дополнительная информация здесь вы, наверное, уже видели.

2 голосов
/ 10 марта 2012

В Windows служба - это то, что

  1. производит большую часть своей удобочитаемой информации в виде событий, отправляемых в журнал событий;
  2. принимает входные данные от операционной системы через любые события, на которые ей нравится отвечать, но всегда должен отвечать на запросы от диспетчера управления службами (SCM) (такие как «запуск службы», «остановка службы», «приостановка службы», ...).

    Как именно эти события доставляются, зависит от возможностей выбранного вами языка программирования; в C (т. е. на уровне операционной системы) вы должны настроить цикл обработки событий и изучить полученные события. Обычно вы выполняете фактическую работу в отдельных потоках с основным потоком в цикле событий.

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

Подробнее об услугах в .NET см. здесь ; подробности о том, как все это работает на уровне C (то есть без каких-либо необычных языковых возможностей), см. здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...