|
什么是 web server?
百度百科是這么解釋的:
Web Server中文名稱叫網(wǎng)頁服務(wù)器或web服務(wù)器。WEB服務(wù)器也稱為WWW(WORLD WIDE WEB)服務(wù)器,主要功能是提供網(wǎng)上信息瀏覽服務(wù)。
Web服務(wù)器可以解析(handles)HTTP協(xié)議。當(dāng)Web服務(wù)器接收到一個HTTP請求(request),會返回一個HTTP響應(yīng)(response),例如送回一個HTML頁面。為了處理一個請求(request),Web服務(wù)器可以響應(yīng)(response)一個靜態(tài)頁面或圖片,進(jìn)行頁面跳轉(zhuǎn)(redirect),或者把動態(tài)響應(yīng)(dynamic response)的產(chǎn)生委托(delegate)給一些其它的程序例如CGI腳本,JSP(JavaServer Pages)腳本,servlets,ASP(Active Server Pages)腳本,服務(wù)器端(server-side)JavaScript,或者一些其它的服務(wù)器端(server-side)技術(shù)。無論它們(譯者注:腳本)的目的如何,這些服務(wù)器端(server-side)的程序通常產(chǎn)生一個HTML的響應(yīng)(response)來讓瀏覽器可以瀏覽。
我們常用的web服務(wù),是IIS,tomcat等。在進(jìn)行網(wǎng)絡(luò)通信的時候我們還會用到socket,甚至可以基于socket來實現(xiàn)HTTP通信,不過我們看一下更簡單的實現(xiàn)。
我們能用來做什么?
IIS是非常強大的,功能齊全。我們的目標(biāo)不是做一個和它一樣的web server。而是基于這樣的理念為我們的開發(fā)和架構(gòu)服務(wù)。
特性和用處:
比如在我們的軟件中 需要在多個應(yīng)用程序通信時。
專用的功能帶來更高的效率,比如我們僅僅處理某幾一個網(wǎng)頁的顯示。我們見過路由里的那個管理路由器的頁面吧,那就是一個輕量級的小web server實現(xiàn),它可放不下一個windows + iis;
內(nèi)嵌的windows應(yīng)用程序,比如我們想在winform里嵌入webBrower,配合它來做一些應(yīng)用。
我們的實現(xiàn)
基于 .net 框架的 HttpListener 類 來處理http協(xié)議,我們只需要基于它寫一個自己的處理類。
 namespace HttpListenerDemo
{
static class Program
{
/// <summary>
/// 應(yīng)用程序的主入口點。
/// </summary>
[STAThread]
static void Main()
{
HttpListener httpListenner;
httpListenner = new HttpListener();
httpListenner.AuthenticationSchemes = AuthenticationSchemes.Anonymous;
httpListenner.Prefixes.Add("http://localhost:8090/");
httpListenner.Start();
new Thread(new ThreadStart(delegate {
try
{
loop(httpListenner);
}
catch (Exception)
{
httpListenner.Stop();
}
})).Start();
}
private static void loop(HttpListener httpListenner)
{
while (true) {
HttpListenerContext context = httpListenner.GetContext();
HttpListenerRequest request = context.Request;
HttpListenerResponse response = context.Response;
Servlet servlet = new MyServlet();
servlet.onCreate();
if (request.HttpMethod == "POST") {
servlet.onPost(request, response);
}
else if (request.HttpMethod == "GET")
{
servlet.onGet(request, response);
}
response.Close();
}
}
}
}
public class Servlet
{
public virtual void onGet(System.Net.HttpListenerRequest request, System.Net.HttpListenerResponse response) { }
public virtual void onPost(System.Net.HttpListenerRequest request, System.Net.HttpListenerResponse response) { }
public virtual void onCreate()
{
}
}
public class MyServlet : HttpListenerDemo.Servlet
{
public override void onCreate()
{
base.onCreate();
}
public override void onGet(HttpListenerRequest request, HttpListenerResponse response)
{
Console.WriteLine("GET:" + request.Url);
byte[] buffer = Encoding.UTF8.GetBytes("OK");
System.IO.Stream output = response.OutputStream;
output.Write(buffer, 0, buffer.Length);
// You must close the output stream.
output.Close();
//listener.Stop();
}
public override void onPost(HttpListenerRequest request, HttpListenerResponse response)
{
Console.WriteLine("POST:" + request.Url);
byte[] res = Encoding.UTF8.GetBytes("OK");
response.OutputStream.Write(res, 0, res.Length);
}
}

如何使用?
1.寫一個class 繼承自 Servlet 類,在這里做具體的 業(yè)務(wù)邏輯實現(xiàn)。
2.復(fù)制main方法里的代碼,在合適的實際 啟動 httpListener。
|