使用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都幫你完成了,而你將會有更多的時間去關心邏輯上的細節.