使用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和文檔


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM