码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-02-14 20:00:37      阅读:976      评论:0      收藏:0      [点我收藏+]

标签:

     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

      

      安装后->安装目录
        技术分享

      新建项目

        技术分享

         技术分享

         技术分享

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

       技术分享

      配置项目-》找到安装目录下的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 缓存时间,单位毫秒 缓存清理间隔时间
SessionTimeout session状态保存时间,单位毫秒 Session状态保存时间,当用户在该时间内进行操作则状态继续延时有效

 

     我设置的端口是:8001

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

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

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

     ContentPath=D:\

     启动服务

     启动安装的服务程序

技术分享

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

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

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

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

技术分享

 

 

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

 

 

    API库概览

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

    Request 对象概览

属性名 说明 备注
DGetSession 获取Session数据的委托对象  
DSetSession 设置Session数据的委托对象  
Cookie Cookie集合(哈希表), 获取方法:string Str1=Request.Cookie["cookie名"].ToString()  
IPInfo 用户ip信息  
SessionID Session 身份标示  
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

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

标签:

原文地址:http://www.cnblogs.com/m2275522946/p/4292083.html

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