您好,欢迎来到12图资源库!分享精神,快乐你我!我们只是素材的搬运工!!
  • 首 页
  • 当前位置:首页 > 网站教程 > HTML教程 >
    使用beetle简单地实现高效的http基础服务
    时间:2016-07-13 21:12 来源: 作者: 浏览:收藏 挑错 推荐 打印
    在这章会讲解Beetle实现一个比较通用的应用协议HTTP扩展.组件对于HTTP协 议的扩展也是一件非常简单的事情,同时也能得到组件出色的性能和稳定性所支持.不过在实现之前必须对HTTP协议组成部分有个大概的了解.HTTP协议主 要由两大部分组件分别是消息头和消息体,消息头是必须的有于描述获取相关内容和附带的一些属性如:GET /images/logo.gif HTTP/1.1,通过回车换行符来标记消息头结束.对于消息休则是可选的如果存在消息体必须在消息头里标识Content-Length.对于HTTP 更详细的内容可以查看http://zh.wikipedia.org/zh/%E8%B6%85%E6%96%87%E6%9C%AC%E4%BC%A0%E8%BE%93%E5%8D%8F%E8%AE%AE
    接下就详细讲述Beetle实现HTTP服务的过程,具体内容如下:
       制订对应的HTTP对象消息结构
       制订HTTP协议分析器
       实现一个HTTP服务并在浏览中访问
       性能测试
       总结
       制订HTTP对象消息
       既然HTTP协议由两大部分组成,那就可以根据这制订相应的协议对象
           消息头
     
       //http头描述
       public class HttpHeader : HttpMessage
       {
           public HttpHeader()
           {
               Headers = new Hashtable(8);
           }
           //消息头常量定义,详细参考http://en.wikipedia.org/wiki/List_of_HTTP_header_fields
           #region headers
           public const string HTTP_ContentLength = "Content-Length";
           public const string HTTP_Request_Accept = "Accept";
           public const string HTTP_Request_AcceptCharset = "Accept-Charset";
           public const string HTTP_Requst_AcceptEncoding = "Accept-Encoding";
           #endregion
           //获取http头键值表
           public Hashtable Headers
           {
               get;
               set;
           }
           //获取设置方法信息如GET /images/logo.gif HTTP/1.1或返回信息
           public string MethodInfo { get; set; }
           //获取或设置消息休长度
           public int ContentLength
           {
               get
               {
                   object value = Headers[HTTP_ContentLength];
                   if (value != null)
                       return int.Parse(value.ToString().Trim());
                   return 0;
               }
               set
               {
                   Headers[HTTP_ContentLength] = value.ToString();
               }
           }
           public string this[string key]
           {
               get
               {
                   return (string)Headers[key];
               }
               set
               {
                   Headers[key] = value;
               }
           }
       }
           消息体
       
       //消息体数据块
       public class HttpDataSegment : HttpMessage
       {
           public HttpDataSegment()
           {
               Data = HttpPackage.BufferPools.Pop();
               Data.SetInfo(0, 0);
           }
           //当前块是否尾部
           public bool Eof
           {
               get;
               set;
           }
           //获取数据块内容
           public ByteArraySegment Data
           {
               get;
               set;
           }
           //释放数据块对应的buffer
           protected override void OnDispose()
           {
               base.OnDispose();
               if (Data != null)
               {
                   HttpPackage.BufferPools.Push(Data);
                   Data = null;
               }
           }
       }

    (责任编辑:12图资源库)