使用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都帮你完成了,而你将会有更多的时间去关心逻辑上的细节.

转载于:https://www.cnblogs.com/Jeely/p/10941915.html

Beetle简单构建TCP服务相关推荐

  1. 使用Beetle简单构建高性能Socket tpc应用

    使用Beetle简单构建高性能Socket tpc应用 c 使用Beetle简单构建高性能Socket tpc应用 您的评价:        收藏该经验 beetle是基于c#编写的高性能Socket ...

  2. 使用Beetle简单构建高性能Socket tcp应用

    beetle是基于c#编写的高性能Socket tcp组件,它基于SocketAsyncEventArgs的实现并提供了发送队列和接收队列的支持,可以根据情况灵活地设置1-N个发送队列和接收队列.除了 ...

  3. 使用Beetle简单构建聊天室程序

    之前已经讲解了Beetle简单地构建网络通讯程序,那程序紧紧是讲述了如何发送和接收数据:这一章将更深入的使用Beetle的功能,主要包括消息制定,协议分析包括消息接管处理等常用的功能.为了更好的描述所 ...

  4. Go实现简单的TCP服务端客户端通信(有黏包)

    目录 客户端代码 服务端代码 封包协议 客户端代码 // socket_stick/client2/main.gofunc main() {conn, err := net.Dial("tc ...

  5. 使用Beetle.Express简单构建高吞吐的TCPUDP应用

    在Beetle.Express1.2中加了UDP支持,而整体的设计结构也做了调整.只需要通过简单的配置就能实现高吐的TCP&UDP应用.由于组件引用UDP服务同样也支持会话状态所以对于服务是T ...

  6. Libevent实现TCP服务循环监听

    目标 建立一个简单的tcp服务,可持续的监听客户端的连接和请求 细节 libevent stream socket EV_READ | EV_PERSIST 代码 要义libevent对stream_ ...

  7. Python写简单的TCP服务器

    每日一怼"你吃那么多盐和咸鱼有什么区别!" 今天来更新一下简单的TCP服务端程序,了解一下流程 创建套接字 导入socket包 创建套接字 绑定IP和端口 bind绑定主机端口 监 ...

  8. Qt 的 tcp服务端讲解

    TCP TCP : (Tramsmission Control Protocl)传输控制协议,一种面向连接的,可靠的,基于字节流的传输层通信协议. 本文目标 实现一个简单的服务器,可以接受客户端的信息 ...

  9. 构建简单的微服务架构

    前言 本篇仅作引导,内容较多,如果阅读不方便,可以使用电脑打开我们的文档官网进行阅读.如下图所示: 文档官网地址:docs.xin-lai.com 目录 总体介绍   微服务架构的好处    微服务架 ...

  10. 使用ASP.Net WebAPI构建REST服务(一)——简单的示例

    由于给予REST的Web服务非常简单易用,它越来越成为企业后端服务集成的首选方法.本文这里介绍一下如何通过微软的Asp.Net WebAPI快速构建REST-ful 服务. 首先创建一个Asp.Net ...

最新文章

  1. P3952 NOIP2017 时间复杂度
  2. P1444 [USACO1.3]虫洞 wormhole,新手向超详细讲解(搜索、判环、拆点、好题)
  3. redisson的锁的类型_利用Redisson实现分布式锁,并防止重复提交
  4. swift--添加新手引导页
  5. 决策树之C4.5算法
  6. c#窗口科学计算机,c#窗口科学计算器连等如何实现,大神帮忙一下好么?
  7. Cnblogs自定义皮肤css样式-星空观测者
  8. Java基础篇(05):函数式编程概念和应用
  9. java监听双按键_java 键盘监听 按一次键监听到两次
  10. JavaScript 中的日期和时间
  11. VS2010 Cocos2d-x 2.2创建模板
  12. js保存网络图片至本地
  13. python flask是什么_python flask是什么
  14. 个人地理数据库和文件地理数据库的区别
  15. 微信H5开发,怎样禁止手机横屏
  16. 我的appstore新游戏--LeBallon 拿码了
  17. ZOJ 3551 Bloodsucker 题解
  18. win10 android虚拟,win10系统安卓模拟器使用的操作方法
  19. 微分方程数值解法(实际应用)
  20. MKNetworkKit: 网络处理又一利器

热门文章

  1. 编程基本功:如何拆分一个大函数
  2. LINUX下载编译nasm
  3. 能否设计变容量发动机
  4. 订阅机票时要注意的几个教训
  5. 错误解决办法:gcc编译时提示对‘sqrt’未定义的引用
  6. gstreamer中查看有哪些元素以及元素的属性(参数)
  7. 网络请求返回数据格式_原生 Ajax 详解 - 响应数据格式
  8. linux添加mysql到服务_Linux下将MySQL服务添加到服务器的系统服务中
  9. c语言编程车速里程测量,电子车速里程表设计开题报告.doc
  10. MySQL免安装版 图文教程【5.7版本,纯净版win7安装】