zoukankan      html  css  js  c++  java
  • 使用Beetle.Express简单构建高吞吐的TCP&UDP应用

    在Beetle.Express1.2中加了UDP支持,而整体的设计结构也做了调整.只需要通过简单的配置就能实现高吐的TCP&UDP应用.由于组件引用UDP服务同样也支持会话状态所以对于服务是TCP或UDP对使用者来说完全是透明的.使用者只需要关心以下几个接口即可:IServer(服务描述接口),IChannel(通道会话),IData(发送数据描述),IReceiveData(数据接收描述)和IServerHandler(服务处理接口).而使用在使用组件的时候只需要实现IServerHandler.

    IServerHandler

    该接口主要用于描述相关服务的工作,包括连接接入,连接释放,数据接收,数据发送完成和处理错误等过程.

    /// <summary>
        /// 服务处理描述接口
        /// </summary>
        public interface IServerHandler
        {
            /// <summary>
            /// 连接创建处理过程
            /// </summary>
            /// <param name="server">对应的Tcp&UDP服务对象</param>
    /// <param name="e">连接详细信息</param> void Connect(IServer server, ChannelConnectEventArgs e); /// <summary> /// 连接断开处理过程 /// </summary> /// <param name="server">对应的Tcp&UDP服务对象</param>
    /// <param name="e">连接详细信息</param> void Disposed(IServer server, ChannelEventArgs e); /// <summary> /// 错误处理过程 /// </summary> /// <param name="server">对应的Tcp&UDP服务对象</param> /// <param name="e">详细错误信息</param> void Error(IServer server, ErrorEventArgs e); /// <summary> /// 数据接收处理过程 /// </summary> /// <param name="server">对应的Tcp&UDP服务对象</param> /// <param name="e">接收数据详细信息</param> void Receive(IServer server, ChannelReceiveEventArgs e); /// <summary> /// 数据发送情况处理过程 /// </summary> /// <param name="server">对应的Tcp&UDP服务对象</param>
    /// <param name="e">数据发送状态信息</param> void SendCompleted(IServer server, ChannelSendEventArgs e); }

    使用Beetle.Express构建TCP或UDP服务,只实现以上接口即可.完全不需要其他工作.

    class Program:IServerHandler
        {
            
    
            public void Connect(IServer server, ChannelConnectEventArgs e)
            {
                Console.WriteLine("{0} connected  @{1}", e.Channel.EndPoint,server.Name);
               
            }
    
            public void Disposed(IServer server, ChannelEventArgs e)
            {
                Console.WriteLine("{0} disposed", e.Channel.EndPoint);
            }
    
            public void Error(IServer server, ErrorEventArgs e)
            {
                Console.WriteLine("{0} error:{1}", e.Channel.EndPoint, e.Error.Message);
               
            }
    
            public void Receive(IServer server, ChannelReceiveEventArgs e)
            {          
                string command = e.Data.ToString(Encoding.UTF8);
                Console.WriteLine("receive:{0}\t@{1}",command,server.Name);
                Data data = new Data(64);
                data.Write(server.Name, Encoding.UTF8);
                server.Send(data, e.Channel); 
            }
            public void SendCompleted(IServer server, ChannelSendEventArgs e)
            {
                
            }
        }

    以上是实现一个网络处理服务,对以上代码来说可以是一个TCP服务也可以是一个UDP服务.由于IServerHandler统一管理服务处理,因此这个实现是TCP或UDP服务取决于ServerFactory加载的配置信息.实际上可以N个TCP服务和UDP服务同时绑定到该Handler上.  

     绑定服务

     组件是通过配置来描服务,可以同时描述多个TCP和UDP服务,下以配置在同一IServerHandler上同量启动TCP和UDP服务.

    <?xml version="1.0"?>
    <configuration>
      <configSections>
        <section name="serverSection" type="Beetle.Express.ServerSection, Beetle.Express"/>
      </configSections>
      <serverSection xmlns="urn:Beetle.Express">
        <listens>
          <add name="TEST_TCP" type="TCP" port="8088" handler="Beetle.Express.Sample.Program,Beetle.Express.Sample"/> 
         <add name="TEST_UDP" type="UDP" port="8089" handler="Beetle.Express.Sample.Program,Beetle.Express.Sample"/>   
     </listens>
      </serverSection>
    <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>

     以上配置是在同一个handler上分别在8088端口上打开TCP服务和在8089打开UDP服务.配置完成后只需要ServerFactory加载即可.

            static ServerFactory mFactory;
            static void Main(string[] args)
            {
             
                mFactory = new ServerFactory("serverSection");
                foreach (IServer item in mFactory.Servers)
                {
                    Console.WriteLine("{0} start @{1}", item.Name, item.Port);
                }
                System.Threading.Thread.Sleep(-1);
            }

     通过Beetle.Express可以非常方便就能构建TCP和UDP服务,而在购建的过程是完全不需要关心Socket相关细节,对于连接的处理和数据收发的细节对使用者来说都是完全透明的.组件还提供了基于LRU算法的连接清除对象,可以更方便地控制连接资源.

    下载Sample

    下载Beetle.Express和文档

    访问Beetlex的Github
  • 相关阅读:
    python计算时间差的方法
    Apache Prefork、Worker和Event三種MPM分析
    nagios监控mysql
    linux安装nagios客户端
    简单易懂的snmpd.conf配置文件说明
    Linux基本监控项目
    python 2.0 s12 day5 常用模块介绍
    python2.0 s12 day4
    ubuntu常用系统命令
    ubuntu编译安装libimobiledevice,查看ios 日志
  • 原文地址:https://www.cnblogs.com/smark/p/3030451.html
Copyright © 2011-2022 走看看