将Windows C++服务器编写为服务或控制台应用程序

3

这需要讨论关于在Windows 7 32位上使用C++进行服务器开发最佳实践的内容

典型的要求:

  1. 一个像“服务器”一样运行于Windows后台的程序。它应该运行数天,每次启动时应自动运行。
  2. 通过TCP套接字协议处理来自其他设备(PC、智能手机、平板电脑)的客户端连接。
  3. 服务器反过来通过TCP和串行通信与连接在同一网络中的大量嵌入式设备进行通信。
  4. 服务器作为客户端(PC、智能手机、平板电脑)和嵌入式设备之间的桥梁。

服务器管理员可以通过配置.ini文件对服务器进行配置,然后启动服务器。

客户端接口是TCP套接字接口,客户端将发送命令,服务器则将以缓冲区(xml)回复。

我的问题:

  1. 我应该将程序编写为“服务”,例如 http://code.msdn.microsoft.com/windowsdesktop/CppWindowsService-cacf4948 吗?

  2. 还是应该编写一个控制台应用程序,并从 XYNTService http://mysite.verizon.net/XiangYangL/XYNTService.htm 控制此可执行文件,使其像服务一样运行?

  3. 或者编写一个控制台应用程序,将其条目添加到注册表中以在登录时启动、重新启动

实际上,选择上述哪个选项会有所影响吗?

非常感谢。


4
如果它像服务一样嘎嘎叫,那就是一个服务。在我看来,“它是否是一个服务”的最重要因素是你没有指定与用户的任何交互。有关XYNT的页面针对NT4.0,因此我怀疑它已经存在了16年。进行考古是没有意义的。 - Agent_L
2
就像一个服务一样。但是为了开发和调试效率,运行为控制台应用程序的命令行选项可能会很有用。 - selbie
1
我同意@selbie的观点。我写了很多服务,无法想象还有其他更有效率的工作方式。 - ixe013
所以,最初我们应该使控制台可执行,然后在同一代码中启用服务模块。我的意思是让代码在调试时可以作为可执行文件,在部署时可以作为服务运行。 - Rohit
@Marc Gravell在这里提供了安装和执行基于C#的服务的一些关键见解:https://groups.google.com/forum/?hl=en&fromgroups=#!topic/microsoft.public.dotnet.languages.csharp/TUXp6lRxy6Q - Matt Davis
显示剩余3条评论
1个回答

0

这正是服务旨在解决的用例,所以把它做成服务。

为了更方便的调试,请添加一个命令行选项以启动它作为控制台进程。


将其设为社区维基,因为我基本上只是在总结已经在评论中给出的答案。 - oefe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接