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 |
关于并发量大家可以自己编写程序测试。
欢迎大家给意见:[email protected]