如何在Windows中开发服务器
How to develop a server in Windows
我是作为一个有着丰富Linux系统编程背景的人来问这个问题的。我在Windows开发方面几乎没有经验,到目前为止,这仅限于"控制台应用程序"类型的程序。
在知道服务器必须在Windows上运行的情况下,开发服务器的规范过程是什么
是否立即构建Windows服务应用程序?调试过程真的像看上去那么令人讨厌吗?Windows开发人员是否为了调试而从命令行应用程序开始,只将其转换为服务进行部署?
作为比较,我将提供Linux"服务器"是所选语言的常规命令行程序。我将服务器定义为一个程序
- 以日志的形式产生其大部分人类可读输出
- 接受来自操作系统的输入(例如网络或文件系统事件),而不是"用户点击了按钮"或"用户键入了命令",以及
- 作为守护进程部署
Windows系统管理员可能期望使用完全不同的接口来启动、停止和管理服务器。我对此完全持开放态度;我只是还没有看到事情的全貌。
$ ./my-server &
Starting...
$ head /var/my-server.log
2012-3-10 14:34:43.934 [info] Server started! Waiting for connection from client
$
首先:是的,Windows上的服务器几乎总是最好作为系统服务来实现。但是,如果服务器也可以从命令行运行以进行故障排除,则会带来额外的好处。
通常情况下,构建代码的结构并不太困难,以便将特定于服务的逻辑抽象为函数,这些函数可以检查您是作为服务运行还是在命令行上运行,并相应地进行操作。我更喜欢有一个单一的源模块,只包含main()函数和特定于服务的东西。为了获得最佳效果,请确保只有此模块知道您在哪种模式下运行。(还请注意,此模块通常可以从一个项目继承到下一个项目,只需进行适度的更改。)
这样做的另一个优点是,这意味着您可以在命令行模式下进行大部分调试,而不需要多个构建选项。您仍然需要测试(可能还需要调试)服务逻辑本身,但这是一项小得多的工作。
这里有一些额外的信息,你可能已经看到了。
在Windows上,服务是
-
以发送到事件日志的事件的形式产生其大部分人类可读的输出;
-
通过操作系统喜欢响应的任何事件接受来自操作系统的输入,但必须始终响应来自服务控制管理器(SCM)的请求(如"启动服务"、"停止服务","暂停服务"…)
具体如何传递这些事件取决于您使用的所选编程语言的功能;在C(即操作系统级别)中,您必须设置一个事件循环并检查接收到的事件。通常,您将在分离的线程中执行实际工作,主线程位于事件循环中。
-
作为一个服务部署,该服务通常是一个控制台可执行文件,它将自己注册到SCM。
有关.NET中服务的更多信息,请参阅此处;关于这一切如何在C级(即没有任何花哨的语言设施)工作的细节,请参阅此处。
- "unknown ca"自生成的 CA、证书和客户端/服务器
- 当我编译webrtc服务器时,Windows上只支持clang-cl
- 如何通过套接字将文本文件的内容从服务器发送到客户端
- 有没有办法知道Tracer是否成功地完全连接到了jaegerclientcpp中的jaeger后端服务器
- 如何用RISC-V GD32VF103CBT6开发板卸载精确的ADC过采样
- 从服务器传输到客户端的消息不会出现
- QTcpSocket在不阻塞GUI的情况下重新连接到服务器
- OpenSSL TLS服务器-使用客户端证书白名单
- 我正在开发服务器,ip作为参数传递不起作用
- 我可以与 python 服务器而不是 c++ 客户端建立 tcp/ip 套接字吗?
- 提升 Asio TCP 服务器 处理多个客户端
- 如何在 Minecraft 服务器上执行命令
- 调试编译的服务器在数据库打开时崩溃
- 使用 QT 开发服务器应用程序是个好主意吗?(QT5)
- 开发C++应用程序,目标服务器有不同的std lib版本,最佳实践是什么
- 用于在C++或Delphi中开发XMPP服务器的库
- 内存/线程泄漏,使用 WinSock2 开发简单的 HTTP 服务器
- 如何在Windows中开发服务器
- 设计注意事项-C++服务器开发
- 在有限的资源上开发服务器的最合适的方法