.net高并发应用实现,异步单线程非堵塞解决方案

GGKServer是一款基于C#.NET开发的高性能Web应用框架,支持万人级并发访问。通过使用SocketAsyncEventArgs对象池和强制gzip压缩等技术提高性能。本文介绍了如何安装配置并运行首个示例应用。

     GGKServer 框架,基于C#.NET(4.0)开发,主要调用库API.DLL 是.Net用一种新的方式开发web应用,实现万人级应用。

     GGKServer 对静态能容采用强制gzip压缩,强制缓存(智能释放缓存)。

     GGKServer 主要实现方式使用 SocketAsyncEventArgs 异步对象池进行异步单线程非堵塞socket服务,类似IOCP。

     GGKServer 启动时会根据站点设置的最大队列初始化一个处理对象的队列池,收到请求Pop一个对象进行处理,完成后Push回池中。

     GGKServer 初始化时会给池中每个对象申请一个Buffer,避免每次收到请求都向操作系统申请内存空间,从而减轻cpu负担。

     GGKServer 池中对象永不释放,对象重复使用。

     GGKServer 能明确的直到每个线程所工作的内容,每个站点有一个主线程、一个Socket服务线程、一个缓存及session管理的线程。

 

  框架安装包分享地址:http://pan.baidu.com/s/1mg1KuFm

      

      安装后->安装目录
        1

      新建项目

        2

         3

         4

      编写第一个Hello接口然后生成项目

       5

      配置项目-》找到安装目录下的GSys.accdb文件,这是个Access数据库文件(所以必须安装Access 2007或更高版本数据库)-》编辑Site表,字段含义如下:

字段名作用备注
Name站点名称 
AppPath站点主程序路径*.dll,*.exe(必填)
ContentPath公共内容文件夹路径(静态文件){如:c:\web\}[注意结尾'\']内容强制缓存,目录发生改变自动清除缓存(必填)
Backlog应用池队列数量,并发量应用池会根据此数量初始化一个池在内存中,请根据实际站点需求配置(10W=1G内存)(必填)
Prot站点端口访问端口(必填)
ReceiveBuffSize接受数据最大量,单位byte(默认10240)此设置会影响socket所能接收数据的大小,实际是socket缓冲区的大小,在站点启动时会初始化一给应用池,跟实际所耗内存挂钩
ReceiveTimeout接受数据超时时间,单位毫秒参考MSDN socket
SendTimeout发送数据超时时间,单位毫秒参考MSDN socket
Remark备注 
AdminID管理员ID与User表关联,由于该版本未支持远程管理,所以该字段无效
ScProt集群端口由于该版本未支持集群服务,所以该字段无效
CacheTime缓存时间,单位毫秒缓存清理间隔时间
SessionTimeoutsession状态保存时间,单位毫秒Session状态保存时间,当用户在该时间内进行操作则状态继续延时有效

 

     我设置的端口是:8001

      AppPath=刚新建的ConsoleApplication1项目启动文件,

     我的是 C:\Documents and Settings\Administrator\桌面\ConsoleApplication1\ConsoleApplication1\bin\Debug\ConsoleApplication.exe

     我把公共内容路径设置成D:\

     ContentPath=D:\

     启动服务

     启动安装的服务程序

6

     来吧,访问我们的第一个接口,Hello World~

     访问地址=http://本机ip:端口/项目命名空间/类名/函数名

     所以我的访问地址是:http://192.168.2.112:8001/ConsoleApplication1/Class1/Hello

    公共内容访问地址=http://本机ip:端口/[文件路径]           

7

 

 

     成功输出Hello  。。。。访问静态文件就不演示了。

 

 

    API库概览

对象名说明备注
Request请求对象,类似asp.net 的Request属性 
Response响应对象,类似asp.net 的Response属性 

    Request 对象概览

属性名说明备注
DGetSession获取Session数据的委托对象 
DSetSession设置Session数据的委托对象 
CookieCookie集合(哈希表), 获取方法:string Str1=Request.Cookie["cookie名"].ToString() 
IPInfo用户ip信息 
SessionIDSession 身份标示 
Method客户请求的模式  get、post 
Uri请求完整路径 
HttpRequestContext客户端发来的请求报文 
Parames参数集合(哈希表),获取方法:string Str1=Request.Parames["参数名"].ToString() 
Heads请求报文头部(哈希表),获取方法:string Str1=Request.Heads["键"].ToString() 
Session获取session数据函数,调用方法 : object Obj=Request.Session("Session名"),没有数据返回null建议不使用Session,建议使用无状态方式开发web应用。
SetSession设置session数据函数,调用方法:Request.SetSession("Session名",值) 建议不使用Session,建议使用无状态方式开发web应用。
   
   
   

    Response 对象概览

属性名说明备注
SocketObject用户连接的Socket对象,可实现自定义发送数据 
StatusInfo响应状态信息,与响应状态码想对应,默认 OK 
Status响应状态代码,默认 200 
Heads响应头 
ResponseContext响应内容 
Write输出字符内容,调用方法:Response.Write("内容",true/false)   true或false 表示是否对内容进行gzip压缩 
WriteFile输出文件,调用方法Response.WriteFile(true/false,true/false,"文件路径"); 第一个参数表示输出文件后是否关闭连接,第二个参数表示是否添加响应头,不添加则输出纯二进制流 
WriteJson输出Json数据,调用方法:Response.Write("内容",true/false)   true或false 表示是否对内容进行gzip压缩 
End  

 

     关于并发量大家可以自己编写程序测试。

     欢迎大家给意见:260893748@qq.com

转载于:https://www.cnblogs.com/m2275522946/p/4292083.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值