zoukankan      html  css  js  c++  java
  • Beetle可靠、高性能的.Net Socket Tcp通讯组件 支持flash amf3,protobuf,Silverlight,windows phone

    Beetle简单构建TCP服务

          使用Beetle构建TCP服务应用是件非常简单的事情,它并不需要你去关注Socket细节,如果你想用Socket编写高性能的TCP服务,那你要关注的东西非常多,异步数据处理,大量连接下的线程管理和连接断相关资源处理等等复杂的事情;使用Beetle那以上的事情完全都可以不用关心,因为Beetle都已经帮你处理好.而你需要做的只需要简单的定义相关对象和绑定相关处理事件即可. 以下是通过Beetle实现一个简单的TCP服务

    配置

     在使用组件的需要对组件进行初始,可以在配置文件进行实始化信息配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <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"/>

    配置了相关信息后,可以调用以下代码进行组件初始化

    1
    Beetle.TcpUtils.Setup("beetle");//初始化组件

    初始化组件只能执行一次,可以在程序开始的时候调用.

    现实TCP服务端

    使用组件构建一个TCP服务是很简单,你并不需要关心Socket也不需要知道怎么用.组件提供一个ServerBase基础类,只需要继承它简单重写几个方法即可以完成TCP服务的编写.

    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
    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和端口即可

    1
    2
    3
    Program server = new Program();
    server.Open(9321);
    C.WriteLine("Server started @9321"); 

    连接到服务端进行数据处理

    组件可以通过TcpServer的CreateClient方法创建一个连接,在使用组件进行client连接的时候也需要做对应的实始化工具,和服务端实始化一样.配置好后只需要以下代码就能创建一个连接.

    1
    2
    3
    4
    5
    6
    7
    8
    //连接到指定IP的端口服务
        channel = Beetle.TcpServer.CreateClient(txtIPAddress.Text, 9321);
        //绑定数据流接收事件
        channel.DataReceive = OnReceive;
        //连接断开事件
        channel.ChannelDisposed += OnDisposed;
        //开始接收数据
        channel.BeginReceive();

    创建连接后,需要发送一个消息也是很简单.

    1
    2
    3
    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
  • 相关阅读:
    [UOJ#128][BZOJ4196][Noi2015]软件包管理器
    [UOJ#127][BZOJ4195][NOI2015]程序自动分析
    [BZOJ3653]谈笑风生
    Django 数据库查询优化
    C#中引用(ref关键字)参数
    C#中值参数的使用实例
    静态变量和实例变量
    全局变量和局部变量的理解
    C#方法定义和调用-2
    C#函数的方法定义和方法调用小议
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2717806.html
Copyright © 2011-2022 走看看