Beetle簡單構建TCP服務


      使用Beetle構建TCP服務應用是件非常簡單的事情,它並不需要你去關注Socket細節,如果你想用Socket編寫高性能的TCP服務,那你要關注的東西非常多,異步數據處理,大量連接下的線程管理和連接斷相關資源處理等等復雜的事情;使用Beetle那以上的事情完全都可以不用關心,因為Beetle都已經幫你處理好.而你需要做的只需要簡單的定義相關對象和綁定相關處理事件即可. 以下是通過Beetle實現一個簡單的TCP服務

配置

 在使用組件的需要對組件進行初始,可以在配置文件進行實始化信息配置

   <configSections>
    <section name="beetle" type="Beetle.ConfigSection, Beetle"/>
  </configSections>
  <beetle Connections="1000"
         Pools="1"
         SocketSendThreads="1"
         SocketReceiveThreads="1"
         SocketThreadSleep="1"
         WorkThreads="1"
         WorkThreadSleep="1"
         SendBufferSize="2048"
         ReceiveBufferSize="2048"
         PackageMaxSize="8196"
         StringEncodingSize="512"
         ChannelMaxQueueData="0"
         ExecutionContext="False"
         TimeOut="30"
         Statistics="False"/>

配置了相關信息后,可以調用以下代碼進行組件初始化

Beetle.TcpUtils.Setup("beetle");//初始化組件

初始化組件只能執行一次,可以在程序開始的時候調用.

現實TCP服務端

使用組件構建一個TCP服務是很簡單,你並不需要關心Socket也不需要知道怎么用.組件提供一個ServerBase基礎類,只需要繼承它簡單重寫幾個方法即可以完成TCP服務的編寫.

    class Program:Beetle.ServerBase
    {
        protected override void OnConnected(object sender, Beetle.ChannelEventArgs e)
        {
            base.OnConnected(sender, e);
            C.WriteLine("{0} connected!", e.Channel.EndPoint);
        }
        protected override void OnDisposed(object sender, Beetle.ChannelDisposedEventArgs e)
        {
            base.OnDisposed(sender, e);
            C.WriteLine("{0} disposed!", e.Channel.EndPoint);
        }
        protected override void OnError(object sender, Beetle.ChannelErrorEventArgs e)
        {
            base.OnError(sender, e);
            C.WriteLine("{0} Error {1}!", e.Channel.EndPoint,e.Exception.Message);
        }
        protected override void OnReceive(object sender, Beetle.ChannelReceiveEventArgs e)
        {
            string value = e.Channel.Coding.GetString(e.Data.Array, e.Data.Offset, e.Data.Count);
            C.WriteLine(value);
            Beetle.StringMessage msg = new Beetle.StringMessage();
            msg.Value = value;
            e.Channel.Send(msg);
        }

    }

以上實現一個簡單的TCP服務,並重寫了4個方法分別是:

OnConnected 連接接入過程

OnDisposed    連接釋放過程

OnError           連接處理錯誤過程

OnReceive       連接數據接收過程

實現一個TCP服務后,只需要創建相關對象並監聽到對應的IP和端口即可

    
    Program server = new Program();
    server.Open(9321);
    C.WriteLine("Server started @9321"); 

連接到服務端進行數據處理

組件可以通過TcpServer的CreateClient方法創建一個連接,在使用組件進行client連接的時候也需要做對應的實始化工具,和服務端實始化一樣.配置好后只需要以下代碼就能創建一個連接.

//連接到指定IP的端口服務
    channel = Beetle.TcpServer.CreateClient(txtIPAddress.Text, 9321);
    //綁定數據流接收事件
    channel.DataReceive = OnReceive;
    //連接斷開事件
    channel.ChannelDisposed += OnDisposed;
    //開始接收數據
    channel.BeginReceive();

創建連接后,需要發送一個消息也是很簡單.

    Beetle.StringMessage msg = new Beetle.StringMessage();
    msg.Value = richTextBox1.Text;
    channel.Send(msg);

通過StringMessage就可以向服務端發送一個string數據,當然這緊緊是一個基礎的通訊;做過TCP的朋友應該知道這樣一個消息是會存在粘包問題,也不能保服務端一次接收就能接收到這個string數據.在后面的章節里會講述beetle如何處理粘包的問題,並進行對象數據發送.

運行效果

下載相關代碼:Code

總結

在使用Beetle構建TCP服務比起傳統Socket服務會簡單很多,而使用的時候並不需要關心Socket的細節;不用擔心如果管理連接和連接斷開處理的工作,對於高並發下也完全不用關心怎樣處理線程達到更佳的效果,以上這么多復雜和煩鎖的工作Beetle都幫你完成了,而你將會有更多的時間去關心邏輯上的細節.


免責聲明!

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



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