如何写一个Web服务器

如何写一个Web服务器,第1张

针对web服务器:首先你要去了解HTTP协议,web server说到底就是一个遵循Http协议的应用程序。可以先写一个简单的,然后去关注一些high performance相关的, i/o 复用(epoll), event loop, non-blocking, C10k问题,tcp调优(tcp_cork, tcp_nodelay...),高级I/O function(e.g. sendfile, writev, readv, mmap, splice, tee...), 常用的服务端架构(推荐陈硕的Muduo C++那本书,不是让你看muduo, 而是他讲的一些思想、做法和框)

创建一个 WEB 服务器

NetBox 的一大功能就是内置支持了 HttpServer 和 asp。下面就按步骤建立一个以服务方式运行的 WEB 服务器。

第一步:创建 WEB 服务器

由于 NetBox 提供了 HttpServer 对象,所以建立一个新的 HttpServer 并且启动、停止、退出,自然便是由 HttpServer 对象来实现,main.box 的代码也就比较简单了:

Set Console = Shell.Console

Set httpd = CreateObject("NetBox.HttpServer")

If httpd.Create("", 80) = 0 Then

httpd.Start

Console.ReadLine

httpd.Stop

httpd.Close

End If

Set httpd = Nothing

在上面的代码中,先创建一个新的 HttpServer,然后在所有的本机地址的 80 端口创建一个服务器,如果创建成功,则启动服务器,等待用户在控制台上输入回车后停止并关闭服务器。

运行这个程序,如果当前系统中未安装其他 Web 服务器,则此程序会显示控制台并等待回车,否则将直接退出。呵,我们的第一个程序都是很拙劣的。没有关系,我们一步一步来。

如果成功运行了程序,便可以用浏览器访问了,由于服务器装在本机,所以打开浏览器,在地址栏输入“http://localhost/”,哈,结果出来了,不过很不好看:

418 Host Not Found

不管想访问什么,都只会是这个结果。这样的结果显然不能满足要求,所以我们需要改进我们的 Web 服务器。

第二步:添加虚拟主机

前面我们建立的服务器之所以总是返回禁止访问,原因是没有为服务器建立主机信息。所以我们修改代码,使用 AddHost 方法增加主机信息的部分:

Set Console = Shell.Console

Set httpd = CreateObject("NetBox.HttpServer")

If httpd.Create("", 80) = 0 Then

httpd.AddHost "", "\wwwroot"

httpd.Start

Console.ReadLine

httpd.Stop

httpd.Close

End If

Set httpd = Nothing

在 NetBox 执行目录建立一个子目录 wwwroot,然后复制一些网页进去。我们再来看看效果如何。执行程序并再次访问“http://localhost/”,结果居然还是“403 Forbidden”。再访问 wwwroot 目录中已有的文件,哈哈,出现正确内容了。所以,实际上主机已经建立出来,但是未给主机提供缺省文件名。

第三步:添加缺省文件

为了让主机知道当用户访问目录时向用户返回的文件,需要使用 AddDefault 方法为主机添加缺省文件名,修改代码如下:

Set Console = Shell.Console

Set httpd = CreateObject("NetBox.HttpServer")

If httpd.Create("", 80) = 0 Then

Set host = httpd.AddHost("", "\wwwroot")

host.AddDefault "default.htm"

httpd.Start

Console.ReadLine

httpd.Stop

httpd.Close

End If

Set httpd = Nothing

我们再访问“http://localhost/”的时候,会发现不再显示禁止访问,而是开始出现了缺省页面的内容。如果给定的缺省文件不存在,则返回“404 File Not Found”。

第四步:支持服务器脚本

上面的步骤建立出来的 Web 服务器,是一个纯静态文件的服务器,是无法执行服务器脚本程序的,为了让我们的 Web 服务器能够理解服务器端脚本程序,需要修改 EnableScript 属性,同时为了让服务器能够使用脚本程序做为缺省文件,还需要再添加一个缺省文件,下面是新修改的代码:

Set Console = Shell.Console

Set httpd = CreateObject("NetBox.HttpServer")

If httpd.Create("", 80) = 0 Then

Set host = httpd.AddHost("", "\wwwroot")

host.EnableScript = true

host.AddDefault "default.asp"

host.AddDefault "default.htm"

httpd.Start

Console.ReadLine

httpd.Stop

httpd.Close

End If

Set httpd = Nothing

接下来,我们就可以在 wwwroot 目录里建立我们的 asp 脚本程序了,建立 test.asp:

<%Response.Write "Hello"%>

NetBox 也支持服务器 box 程序,在 wwwroot 目录中建立 test.box:

Response.Write "Hello"

第五步:以服务方式运行

到目前为止,已经有一个相对完整的 Web 服务器程序了,下面我们需要将这个服务器改写为系统服务程序,可以将其安装成为一个系统服务,更加便于运行维护。改写成为服务程序需要使用 Service 对象。

下面便是一个完整的 Web 服务程序的代码,关于 Service 对象的更多信息请参阅手册相关内容。

Dim httpd

Shell.Service.RunService "NBWeb", "NetBox Web Server", "NetBox Http Server Sample"

---- Service Event ---

Sub OnServiceStart()

Set httpd = CreateObject("NetBox.HttpServer")

If httpd.Create("", 80) = 0 Then

Set host = httpd.AddHost("", "\wwwroot")

host.EnableScript = true

host.AddDefault "default.asp"

host.AddDefault "default.htm"

httpd.Start

else

Shell.Quit 0

end if

End Sub

Sub OnServiceStop()

httpd.Close

End Sub

Sub OnServicePause()

httpd.Stop

End Sub

Sub OnServiceResume()

httpd.Start

End Sub

总结

实现一个完整的 Web 服务程序,需要 HttpServer,HttpServerHost,Service 三个对象的支持,HttpServer 负责建立服务器并控制服务器的运行状态,HttpServerHost 负责建立主机信息, Service 则负责完成与服务程序相关的操作。

windows Server 2012 搭建web服务器方法如下:打开服务器管理器,找到添加角色与功能,单击打开。点击下一步,至如图所示的界面,检查一下服务器信息,看看是否有误,确认无误后,点击下一步选择We


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/192022.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-31
下一篇2023-03-31

发表评论

登录后才能评论

评论列表(0条)

    保存