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

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]

时间: 2024-10-12 16:43:04

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

网站高并发大流量访问的处理及解决方案

1.硬件升级 普通的P4服务器一般最多能支持每天10万独立IP,如果访问量比这个还要大, 那么必须首先配置一台更高性能的专用服务器才能解决问题 ,否则怎么优化都不可能彻底解决性能问题. 2.负载均衡 它是根据某种负载策略把请求分发到集群中的每一台服务器上,让整个服务器群来处理网站的请求. 公司比较有钱的,可以购买专门负责负载均衡的硬件(如:F5),效果肯定会很好.对于大部分公司,会选择廉价有效的方法扩展整个系统的架构,来增加服务器的吞吐量和处理能力,以及承载能力. 3.服务器集群 服务器集群就是

理论铺垫:阻塞IO、非阻塞IO、IO多路复用/事件驱动IO(单线程高并发原理)、异步IO

完全来自:http://www.cnblogs.com/alex3714/articles/5876749.html 同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案是不同的.所以先限定一下本文的上下文. 本文讨论的背景是Linux环境下的network IO. 一 概念说明 在进行解释之前,首先要说明几个概念:- 用户空间和内核空间- 进程切换- 进程的阻塞- 文件描述符- 缓存 I/O 用户空间与内核空间 现在操作系统都是采用虚拟存储器,

基于redis+lua实现高并发场景下的秒杀限流解决方案

转自:https://blog.csdn.net/zzaric/article/details/80641786 应用场景如下: 公司内有多个业务系统,由于业务系统内有向用户发送消息的服务,所以通过统一消息系统对外暴露微服务接口供外部业务系统调用,所有公司内业务系统的消息(短信,APP,微信)推送都由统一消息系统去推送,短信推送需要走外部短信通道商去发送短信,APP和微信走内部系统的push服务器,但是不管是短信通道商还是内部push服务器都会有每秒上限的控制.在这假设n/s条. 以下是统一消息

《Netty Zookeeper Redis 高并发实战》 图书简介

<Netty Zookeeper Redis 高并发实战> 图书简介 ## 重要的重复3遍: 本书 面试必备 + 面试必备 + 面试必备 购买链接 京东商城<Netty Zookeeper Redis 高并发实战 > <Netty Zookeeper Redis 高并发实战> 图书简介 机械工业出版社出版,尼恩编著的<Netty Zookeeper Redis 高并发实战>一书, 从操作系统底层的IO原理入手,同时提供高性能开发的实战案例,是一本高并发Jav

大型高并发高负载网站的系统架构(转)

一个小型的网站,比如个人网站,可以使用最简单的html静态页面就能实现了,配合一些图片达到美化的效果,所有的页面均放在一个目录下,这样的网 站对系统架构.性能的要求都很简单,随着互联网业务的不断丰富,网站相关的技术经过这些年的发展,已经细分到很细的方方面面,尤其对于大型网站来说,所采 用的技术更是涉及面非常广,从硬件到软件.编程语言.数据库.webServer.防火墙等各个领域都有了很高的要求,已经不是原来的简单的html静态 网站的所能比拟的. 大型网站,比如门户网站.在面对大量用户访问.高并

高并发实时弹幕系统 并发数一定是可以进行控制的 每个需要异步处理开启的 Goroutine(Go 协程)都必须预先创建好固定的个数,如果不提前进行控制,那么 Goroutine 就随时存在爆发的可能。

小结: 1.内存优化1.一个消息一定只有一块内存使用 Job 聚合消息,Comet 指针引用. 2.一个用户的内存尽量放到栈上内存创建在对应的用户 Goroutine(Go 程)中. 3.内存由自己控制主要是针对 Comet 模块所做的优化,可以查看模块中各个分配内存的地方,使用内存池. 2.模块优化1.消息分发一定是并行的并且互不干扰要保证到每一个 Comet 的通讯通道必须是相互独立的,保证消息分发必须是完全并列的,并且彼此之间互不干扰. 2.并发数一定是可以进行控制的每个需要异步处理开启的

Java异步NIO框架Netty实现高性能高并发

1. 背景 1.1. 惊人的性能数据 近期一个圈内朋友通过私信告诉我,通过使用Netty4 + Thrift压缩二进制编解码技术,他们实现了10W TPS(1K的复杂POJO对象)的跨节点远程服务调用.相比于传统基于Java序列化+BIO(同步堵塞IO)的通信框架.性能提升了8倍多. 其实,我对这个数据并不感到吃惊,依据我5年多的NIO编程经验.通过选择合适的NIO框架,加上高性能的压缩二进制编解码技术,精心的设计Reactor线程模型,达到上述性能指标是全然有可能的. 以下我们就一起来看下Ne

聊聊高并发(四十一)解析java.util.concurrent各个组件(十七) 任务的异步执行和状态控制

聊聊高并发(三十九)解析java.util.concurrent各个组件(十五) 理解ExecutorService接口的设计这篇说了ExecutorService接口扩展了Executor接口,在执行任务的基础上,提供了执行框架生命周期的管理,任务的异步执行,批量任务的执行的能力.AbstractExecutorService抽象类实现了ExecutorService接口,提供了任务异步执行和批量执行的默认实现.这篇说说任务的异步执行和状态控制 说明一点,使用Executor框架执行任务的方式

[Design] 后端程序高并发与异步

既然涉及到高并发这个概念,就少不了先谈这么几个概念,并发数.多进程.多线程.协程.负载均衡. 操作系统上讲的并发是操作系统上有几个程序在同时执行,单核CPU在微观上是由CPU调度执行,非同时执行,多核CPU在微观上才是真正的并行. 互联网产品的并发通常是指并发连接数,用户同时访问数量,哪些因素能影响到并发能力,既有编程模型,也有服务器负载能力. PHP 依赖多进程解决并发数,是最原始和耗费资源的一种方式. 以 8G 内存服务器为例,一个PHP进程占用20M内存,最多也就开几百个进程,假如任务比较