2012-03-10 74 views
3

我問這個問題,作爲一個具有強大Linux系統編程背景的人。我在Windows開發方面的經驗非常少,迄今爲止這僅限於「控制檯應用程序」類型的程序。如何在Windows中開發服務器

什麼是開發服務器,知道它必須在Windows上運行的規範流程?

立即建立一個Windows服務應用程序嗎?調試過程真的是as obnoxious as it seems? 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 
$ 
+0

我原來的問題很清楚地說「服務器」,而不是「Windows服務」。這是故意的,因爲我不知道我是否需要Windows服務。因此,我恢復了編輯。 – 2012-03-10 15:01:12

回答

2

Windows上的服務是什麼,

  1. 產生最發送到事件日誌事件的形式的人類可讀的輸出;
  2. 通過它喜歡的任何迴應事件接受來自操作系統的輸入,但必須始終從服務控制管理器(SCM)(如「啓動服務」,「一站式服務」,「暫停服務」的要求作出迴應,.. )。

    這些事件究竟如何傳遞取決於您使用所選擇的編程語言的設施;在C中(即在操作系統級別),你必須建立一個事件循環並檢查收到的事件。通常情況下,您將使用事件循環中的主線程在分離的線程中執行實際工作。

  3. 部署爲一個服務,它通常是將自己註冊到SCM控制檯可執行文件。

欲瞭解更多有關.NET服務的信息,請參閱here;關於這一切如何在C級別工作(即沒有任何花哨的語言設施)的基本細節,請參閱here

+0

開發+調試過程如何? 「安裝,啓動,附加到流程」對於開發一些看似符合法案的東西似乎是一個很大的開銷。 – 2012-03-10 15:03:03

+0

似乎沒有其他選擇(儘管可以通過將安裝服務定義爲自定義構建操作並將調試器默認附加到進程而不是嘗試啓動它來簡化工作)。 – 2012-03-10 15:29:59

3

首先:是的,Windows上的服務器實現爲系統服務幾乎總是可取的。但是,如果服務器也可以從命令行運行以進行故障排除,那麼這是額外的好處。

它通常不是太困難,使特定服務邏輯被抽象成可以檢查是否你的服務或在命令行上運行和相應行爲的功能來構建你的代碼。我更喜歡一個包含main()函數和特定於服務的東西的源模塊。爲獲得最佳效果,請確保只有該模塊知道您正在運行哪種模式。(還要注意,該模塊通常可以從一個項目繼承到下一個,只需進行適度更改)。

這樣做的另一個優點是這意味着您可以在命令行模式下執行大部分調試,而無需使用多個構建選項。你仍然需要測試(也可能調試)服務邏輯本身,但這是一個小得多的工作。

您可能已經看到一些其他信息here