Beetle可靠、高性能的.Net Socket Tcp通讯组件 支持flash amf3,protobuf,Silverlight,windows phone
smark
Beetle可靠、高性能的.Net Socket Tcp通讯组件 支持flash amf3,protobuf,Silverlight,windows phone
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都帮你完成了,而你将会有更多的时间去关心逻辑上的细节.
专注于可靠、高性能的Socket TCP通讯组件
分类: Beetle
作者: Leo_wl
出处: http://www.cnblogs.com/Leo_wl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
版权信息查看更多关于Beetle可靠、高性能的.Net Socket Tcp通讯组件 支持flash amf3,prot的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did47891