码迷,mamicode.com
首页 > 其他好文 > 详细

一个高性能,易用的socket框架

时间:2018-01-03 13:54:55      阅读:1277      评论:0      收藏:0      [点我收藏+]

标签:超过   连接   targe   发送消息   简介   流程   fetch   success   connect   

      最近用C# 写了一个易用,高性能的socket,抗住了ServerTestTool.exe 压力测试工具 下载地址  GitHub

socket.core

这是一个基于C# standard 写的socket框架,接口设计简单,单独线程运行,不影响调用方。可使用于net Framework 4.x.x/standard程序集,能在window(IOCP)/linux正常运行.

安装NuGet:
Package Manager: Install-Package socket.core
.Net CLI :dotnet add package socket.core
Paket CLI:paket add socket.core

服务端所在socket.core.Server命名空间下,分别为三种模式 push/pull/pack
客户端所在socket.core.Client命名空间下,分别为三种模式 push/pull/pack

主要流程与对应的方法和事件介绍.
注:connectId(guid)代表着一个连接对象,data(byte[]),success(bool)

  • 1.初始化socket(对应的三种模式)

    实例化服务端类 TcpPushServer/TcpPullServer/TcpPackServer
    实例化客户端类 TcpPushClient/TcpPullClient/TcpPackClient

  • 2.启动监听/连接服务器

    服务端 server.Start(port);
    客户端 client.Connect(ip,port);

  • 3.触发连接事件

    服务端 server.OnAccept(connectId); 接收到一个连接id,可用他来发送,接收,关闭的标记
    客户端 client.OnAccept(success); 接收是否成功连接到服务器

  • 4.发送消息

    服务端 server.Send(connectId,data,offset,length);
    客户端 client.Send(data,offset,length);

  • 5.触发接收事件

    服务端 server.OnReceive(connectId, data);
    客户端 client.OnReceive(data);

  • 6.关闭连接

    服务端 server.Close(connectId);
    客户端 client.Close();

  • 7.触发关闭连接事件

    服务端 server.OnClose(connectId);
    客户端 client.OnClose();

三种模型简介

    • 一:push

      会触发监听事件对象OnReceive(connectId,data);把数据立马“推”给应用程序

    • 二:pull

      到数据时会触发监听事件对象OnReceive(connectId,length),告诉应用程序当前已经接收到了多少数据,应用程序检查数据的长度,如果满足则调用组件的Fetch(connectId,length)方法,把需要的数据“拉”出来

    • 三:pack

      pack模型组件是push和pull模型的结合体,应用程序不必要处理分包/合包,组件保证每个server.OnReceive(connectId,data)/client.OnReceive(data)事件都向应用程序提供一个完整的数据包
      注:pack模型组件会对应用程序发送的每个数据包自动加上4个字节(32位)的包头,组件接收到数据时,根据包头信息自动分包,每个完整的数据包通过OnReceive事件发送给应用程序
      PACK包头格式
      XXXXXXXXXXYYYYYYYYYYYYYYYYYYYYYY
      前10位X为包头标识位,用于数据包校验,有效包头标识取值范围0~1023(0x3FF),当包头标识等于0时,不校验包头,后22位Y为长度位,记录包体长度。有效数据包最大长度不能超过4194303(0x3FFFFF)字节(byte),应用程序可以通过TcpPackServer/TcpPackClient构造函数参数headerFlag设置

      2017/12/27

一个高性能,易用的socket框架

标签:超过   连接   targe   发送消息   简介   流程   fetch   success   connect   

原文地址:https://www.cnblogs.com/fengmazi/p/8183078.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!