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都帮你完成了,而你将会有更多的时间去关心逻辑上的细节.
Beetle简单构建TCP服务的更多相关文章
- 使用Beetle简单构建高性能Socket tcp应用
beetle是基于c#编写的高性能Socket tcp组件,它基于SocketAsyncEventArgs的实现并提供了发送队列和接收队列的支持,可以根据情况灵活地设置1-N个发送队列和接收队列.除了 ...
- 使用Beetle简单构建聊天室程序
之前已经讲解了Beetle简单地构建网络通讯程序,那程序紧紧是讲述了如何发送和接收数据:这一章将更深入的使用Beetle的功能,主要包括消息制定,协议分析包括消息接管处理等常用的功能.为了更好的描述所 ...
- 【swoole】使用swoole简单实现TCP服务
上一篇写到了如何在windows系统上面利用docker快速搭建swoole开发环境,接下来体验下swoole的使用 使用swoole实现tcp服务 <?php $serv = new Swoo ...
- 编写一个简单的TCP服务端和客户端
下面的实验环境是linux系统. 效果如下: 1.启动服务端程序,监听在6666端口上 2.启动客户端,与服务端建立TCP连接 3.建立完TCP连接,在客户端上向服务端发送消息 4.断开连接 实现 ...
- 通过Erlang构建TCP服务应用案例(最原始方式)
文章来源:公众号-智能化IT系统. 案例介绍 本文介绍的案例是TCP网络服务器的构建,用最原始的方式(非OTP).其功能很简单,通过网络TCP接口接收数据,按照指定的格式解析,并把数据存储至Mongo ...
- python简单的tcp服务端
1 #!/usr/bin/python 2 # -*- coding: UTF-8 -*- 3 # 文件名:tcpserver.py 4 5 import socket 6 import time 7 ...
- BeetleX之TCP服务应用详解
BeetleX是.net core平台下的一个开源TCP 通讯组件,它不仅使用简便还提供了出色性能的支持,可以轻易让你实现上百万级别RPS吞吐的服务应用.组件所提供的基础功能也非常完善,可以让你轻易扩 ...
- gRPC初探——概念介绍以及如何构建一个简单的gRPC服务
目录 引言 1. gRPC简介 2. 使用Protocol Buffers进行服务定义 2.1 定义消息 2.2 定义服务接口 3.构建简单的gRPC服务 3.1 编写proto文件,定义消息和接口 ...
- 使用ASP.Net WebAPI构建REST服务(一)——简单的示例
由于给予REST的Web服务非常简单易用,它越来越成为企业后端服务集成的首选方法.本文这里介绍一下如何通过微软的Asp.Net WebAPI快速构建REST-ful 服务. 首先创建一个Asp.Net ...
随机推荐
- htm、html、shtml区别。(web服务器配置ssi)
转载源:http://www.divcss5.com/html/h59.shtml 首先htm.html.shtml都是静态网页的后缀,三者也可以说都是只是扩展名不同,其他一样,都是静态的网页.Htm ...
- 混合加密算法(RSA和DES)
一.混合加密的理由 a.前面提及了RSA加解密算法和DES加解密算法这两种加解密算法,由于随着计算机系统能力的不断发展,DES的安全性比它刚出现时会弱得多,追溯历史破解DES的案例层出不穷,一台实际的 ...
- 学习R的悬疑录(不定期更新)
在使用caret包建模时候,没有导入机器学习包,如rpart.randomForest等,并不会对结果有影响.不知道是不是caret包内置了机器学习模块. # 加载r包 library(data.ta ...
- Insomni'hack teaser 2019 - Pwn - 1118daysober
参考链接 https://ctftime.org/task/7459 Linux内核访问用户空间文件:get_fs()/set_fs()的使用 漏洞的patch信息 https://maltekrau ...
- STM32CubeMX FreeRTOS no definition for "osThreadGetState" 解决办法
用STM32CubuMX默认加入的FreeRTOS默认配置eTaskGetState是禁止的 把该功能设为Enabled编译就不会出错了 IAR的编译器要勾选Allow VLA
- 面试官:SpringBoot jar 可执行原理,知道吗?
文章篇幅较长,但是包含了SpringBoot 可执行jar包从头到尾的原理,请读者耐心观看.同时文章是基于 SpringBoot-2.1.3进行分析.涉及的知识点主要包括Maven的生命周期以及自定义 ...
- 前端每日实战:126# 视频演示如何用纯 CSS 创作小球变矩形背景的按钮悬停效果
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/yxbEzJ 可交互视频 此视频是可 ...
- DevExpress v19.1新版亮点——WinForms篇(三)
行业领先的.NET界面控件DevExpress v19.1终于正式发布,本站将以连载的形式介绍各版本新增内容.在本系列文章中将为大家介绍DevExpress WinForms v19.1中新增的一些控 ...
- PKUSC2019颓废记
Day -x \(THU\):"想过初审?gck" 我:"你说gck,那就gck⑧" 于是就来\(PKU\)碰碰运气了 Day 0 为了赶高铁起的很早. 颓了一 ...
- 1.使用kubeadm安装kubernetes
一.环境准备 所有规划主机(一台master,两台node)均需操作 1.关闭防火墙,selinux [root@node1 ~]# systemctl stop firewalld [root@no ...
