zoukankan      html  css  js  c++  java
  • C# .net基于Http实现web server(web服务)

    什么是 web server? 

    百度百科是这么解释的:

    Web Server中文名称叫网页服务器或web服务器WEB服务器也称为WWW(WORLD WIDE WEB)服务器,主要功能是提供网上信息浏览服务。

    Web服务器可以解析(handles)HTTP协议。当Web服务器接收到一个HTTP请求(request),会返回一个HTTP响应(response),例如送回一个HTML页面。为了处理一个请求(request),Web服务器可以响应(response)一个静态页面或图片,进行页面跳转(redirect),或者把动态响应(dynamic response)的产生委托(delegate)给一些其它的程序例如CGI脚本,JSP(JavaServer Pages)脚本,servlets,ASP(Active Server Pages)脚本,服务器端(server-side)JavaScript,或者一些其它的服务器端(server-side)技术。无论它们(译者注:脚本)的目的如何,这些服务器端(server-side)的程序通常产生一个HTML的响应(response)来让浏览器可以浏览。

    通俗的讲,Web服务器传送(serves)页面使浏览器可以浏览,然而应用程序服务器提供的是客户端应用程序可以调用(call)的方法(methods)。确切一点,你可以说:Web服务器专门处理HTTP请求(request),但是应用程序服务器是通过很多协议来为应用程序提供(serves)商业逻辑(business logic)。
     
    常用的web Server

    我们常用的web服务,是IIS,tomcat等。在进行网络通信的时候我们还会用到socket,甚至可以基于socket来实现HTTP通信,不过我们看一下更简单的实现。

    我们能用来做什么?

    IIS是非常强大的,功能齐全。我们的目标不是做一个和它一样的web server。而是基于这样的理念为我们的开发和架构服务。

    特性和用处:

      比如在我们的软件中 需要在多个应用程序通信时。

      专用的功能带来更高的效率,比如我们仅仅处理某几一个网页的显示。我们见过路由里的那个管理路由器的页面吧,那就是一个轻量级的小web server实现,它可放不下一个windows + iis;

      内嵌的windows应用程序,比如我们想在winform里嵌入webBrower,配合它来做一些应用。

      

    我们的实现

    基于 .net 框架的 HttpListener 类 来处理http协议,我们只需要基于它写一个自己的处理类。

    namespace HttpListenerDemo
    {
        static class Program
        {
            /// <summary>
            /// 应用程序的主入口点。
            /// </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 类,在这里做具体的 业务逻辑实现。

    2.复制main方法里的代码,在合适的实际 启动 httpListener。

    
    

    参考:http://wenku.baidu.com/link?url=105Uuf34jmjbFnNEp1YTw1ry3Rx7_bXoKWQvLciQRUg9g5wJpViAedTYP45yUcruGEjuL7lACtwyu2g2KplUhOLA5XCLKbrY1NzWf7Ah1Fe

    http://msdn.microsoft.com/zh-cn/library/system.net.httplistener(v=vs.110).aspx

  • 相关阅读:
    微信小程序——gulp处理文件
    小程序开发经验总结
    微信小程序入门之构建一个简单TODOS应用
    3元体验腾讯云小程序后端解决方案
    C++笔记:面向对象编程(Handle类)
    你真的知道你看到的UTF-8字符是什么吗?
    Unity3D游戏开发之在Unity3D中视频播放功能的实现
    vb.net机房收费系统——存储过程
    Oracle基础学习4--Oracle权限传递
    我与京东的那些事儿
  • 原文地址:https://www.cnblogs.com/linybo/p/14047870.html
Copyright © 2011-2022 走看看