使用Beetle.Express简单构建高吞吐的TCP&UDP应用
在Beetle.Express1.2中加了UDP支持,而整体的设计结构也做了调整.只需要通过简单的配置就能实现高吐的TCP&UDP应用.由于组件引用UDP服务同样也支持会话状态所以对于服务是TCP或UDP对使用者来说完全是透明的.使用者只需要关心以下几个接口即可:IServer(服务描述接口),IChannel(通道会话),IData(发送数据描述),IReceiveData(数据接收描述)和IServerHandler(服务处理接口).而使用在使用组件的时候只需要实现IServerHandler.
IServerHandler
该接口主要用于描述相关服务的工作,包括连接接入,连接释放,数据接收,数据发送完成和处理错误等过程.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | /// <summary> /// 服务处理描述接口 /// </summary> public interface IServerHandler { /// <summary> /// 连接创建处理过程 /// </summary> /// <param name="server">对应的Tcp&UDP服务对象</param><br> /// <param name="e">连接详细信息</param> void Connect(IServer server, ChannelConnectEventArgs e); /// <summary> /// 连接断开处理过程 /// </summary> /// <param name="server">对应的Tcp&UDP服务对象</param><br> /// <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><br> /// <param name="e">数据发送状态信息</param> void SendCompleted(IServer server, ChannelSendEventArgs e); } |
使用Beetle.Express构建TCP或UDP服务,只实现以上接口即可.完全不需要其他工作.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | 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服务.
1 2 3 4 5 6 7 8 9 10 11 12 | <? 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加载即可.
1 2 3 4 5 6 7 8 9 10 11 | 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算法的连接清除对象,可以更方便地控制连接资源.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2012-04-19 使用Beetle实现http代理服务