您好,欢迎来到12图资源库!分享精神,快乐你我!我们只是素材的搬运工!!
  • 首 页
  • 当前位置:首页 > 网站教程 > HTML教程 >
    使用beetle简单地实现高效的http基础服务(3)
    时间:2016-07-13 21:12 来源: 作者: 浏览:收藏 挑错 推荐 打印

    通过实现Import方法来处理协议数据分析,对于http头的拆分可以通过下载完整代码查看.   实现一个HTTP服务并在浏览中访问
       组件提供基础的服务对象,只需要在继承指写对应的协议分析器即可,用起来也非常简单方便.
       
       class Program:ServerBase<Beetle.Packages.HttpPackage>
       {
           static void Main(string[] args)
           {
               //初如化组件
               TcpUtils.Setup("beetle");
               Program server = new Program();
               server.Listens = 1000;
               //在所有IP的8088端口上监听服务
               server.Open(8088);
               Console.WriteLine("Beetle Http Server start@8088");
               System.Threading.Thread.Sleep(-1);
       
           }
           protected override void OnConnected(object sender, ChannelEventArgs e)
           {
               base.OnConnected(sender, e);
               e.Channel.EnabledSendCompeletedEvent = true;
               e.Channel.SendMessageCompleted = (o, i) => {
                   HttpPackage.HttpAdater adapter = (HttpPackage.HttpAdater)i.Messages[i.Messages.Count - 1];
                   //消息发送完成后判断是否关闭对应的连接
                   if (adapter.Message is HttpPackage.HttpHeader)
                   {
                       if (((HttpPackage.HttpHeader)adapter.Message).ContentLength == 0 && e.Channel != null)
                           e.Channel.Dispose();
       
                   }
                   else if (adapter.Message is HttpPackage.HttpDataSegment)
                   {
                       if (((HttpPackage.HttpDataSegment)adapter.Message).Eof && e.Channel != null)
                           e.Channel.Dispose();
                   }
       
               };
               
           }
           //错误处理事件,可以获取协议分析和逻辑处理环节中出现的异常
           protected override void OnError(object sender, ChannelErrorEventArgs e)
           {
               base.OnError(sender, e);
              Console.WriteLine("{0} error:{1}", e.Channel.EndPoint, e.Exception.Message);
               Console.WriteLine(e.Exception.StackTrace);
           }
           //连接释放过程
           protected override void OnDisposed(object sender, ChannelDisposedEventArgs e)
           {
               base.OnDisposed(sender, e);
           }
           //消息接收处理事件
           protected override void OnMessageReceive(PacketRecieveMessagerArgs e)
           {
               base.OnMessageReceive(e);
               if (e.Message is HttpPackage.HttpHeader)
               {
                   OnRequestHeader(e.Channel, (HttpPackage.HttpHeader)e.Message);
               }
               else if (e.Message is HttpPackage.HttpDataSegment)
               {
                   OnRequestSegment(e.Channel, (HttpPackage.HttpDataSegment)e.Message);
               }
           }
           //得到请求头信息处理过程
           private void OnRequestHeader(TcpChannel channel, Beetle.Packages.HttpPackage.HttpHeader header)
           {
               //Console.WriteLine(header.MethodInfo);
               //foreach (object key in header.Headers.Keys)
               //{
               //    Console.WriteLine("{0}:t{1}", key, header[(string)key]);
               / (责任编辑:12图资源库)