博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用Beetle.Express简单构建高吞吐的TCP&UDP应用
阅读量:6702 次
发布时间:2019-06-25

本文共 3095 字,大约阅读时间需要 10 分钟。

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

IServerHandler

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

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

 以上配置是在同一个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算法的连接清除对象,可以更方便地控制连接资源.

转载地址:http://gbgoo.baihongyu.com/

你可能感兴趣的文章
MySql 触发器同步备份数据表记录
查看>>
Flex强制类型转换错误
查看>>
oracle中LAG()和LEAD()等分析统计函数的使用方法(统计月增长率)
查看>>
二分查找
查看>>
【进阶修炼】——改善C#程序质量(1)
查看>>
Ansible@一个高效的配置管理工具--Ansible configure management--翻译(八)
查看>>
Redis多机功能之Sentinel
查看>>
C# 利用WORD模板和标签(bookmark) 批量生成WORD
查看>>
开机黑屏 仅仅显示鼠标 电脑黑屏 仅仅有鼠标 移动 [已成功解决]
查看>>
asp.net使用jquery.form实现图片异步上传
查看>>
关于git不区分文件名大小写的处理
查看>>
InstallShield 制作MSI
查看>>
SYS_CONTEXT 详细用法
查看>>
Windows右键菜单设置与应用技巧
查看>>
Union和Union All的差别
查看>>
央行启动我国征信自律组织研究课题
查看>>
C#开发微信门户及应用(1)--开始使用微信接口
查看>>
(Protype Pattern)原型模式
查看>>
[Bhatia.Matrix Analysis.Solutions to Exercises and Problems]ExI.3.1
查看>>
android stuio eclipse映射下的快捷键
查看>>