[asp.net]开发高性能服务器须知

要编写高性能的Socket服务器,为每个接收的Socket分配独立的处理线程的做法是不可取的,当连接数量很庞大时,服务器根本无法应付。要响应庞大的连接数量,需要使用IOCP(完成端口)来撤换并处理响应。

.net framework的System.Net.Sockets.Socket 类有一组xxxAsync方法是封装了IOCP的处理,用于编写高性能Socket应用程序,xxxAsync该组方法需要结合SocketAsyncEventArgs类来使用,下面是MSDN参考资料,里面有一个详细的例子:

http://msdn.microsoft.com/zh-cn/library/system.net.sockets.socketasynceventargs.aspx

Socket类xxxAsync的方法,使用起来比较复杂,需要时间消化上述的例子,结合实际编写所需的操作。

 

以下是使用SocketAsyncEventArgs时应该注意的地方:

1.连接和接收时不要使用一个SocketAsyncEventArgs对象,如下面代码,accept和receive是不同的对象,不用使用同一个SocketAsyncEventArgs调用AcceptAsync和ReceiveAsync方法。

    SocketAsyncEventArgs accept = _RequestPool.PopOrNew();

    bool raise = _Listener.AcceptAsync(accept);

    …

    SocketAsyncEventArgs receive = _RequestPool.PopOrNew();

    receive.SetBuffer(http.ReceiveBuffer, 0, http.ReceiveBuffer.Length);

    bool raise = http.Socket.ReceiveAsync(receive);

2.应该使用可伸缩的SocketAsyncEventArgsPool连接池缓存,如下面的PopOrNew方法,其他数据缓存类似。

    class SocketAsyncEventArgsPool

    {

        Stack<SocketAsyncEventArgs> _Pool;

        public SocketAsyncEventArgsPool()

        {

            _Pool = new Stack<SocketAsyncEventArgs>();

        }

        public void Push(SocketAsyncEventArgs item)

        {

            if (item == null) return;

            lock (_Pool)

            {

                _Pool.Push(item);

            }

        }

        public SocketAsyncEventArgs PopOrNew()

        {

            if (Count == 0)

                return new SocketAsyncEventArgs();

            return Pop();

        }

        public SocketAsyncEventArgs Pop()

        {

            lock (_Pool)

            {

                return _Pool.Pop();

            }

        }

        public int Count

        {

            get { return _Pool.Count; }

        }

        public void Clear()

        {

            while (Count > 0)

            {

                Pop().Dispose();

            }

        }

    }

3.当接收到长度为0的数据时,表明客户端关闭Socket,这时应该开始执行服务端的Socket关闭操作。

    private void OnReceive(SocketAsyncEventArgs receive)

    {

        try

        {

            if (receive.SocketError == SocketError.Success && receive.BytesTransferred > 0)

            {

                //处理接收

                …

            }

            else

            {

                Close(receive); //关闭Socket

            }

        }

        catch (Exception ex)

        {

            TraceError(ex);

        }

    }

转自

时间: 2024-09-04 12:52:54

[asp.net]开发高性能服务器须知的相关文章

国内首款基于asp.net技术开发的服务器管理软件

数据王服务器系列软件是国内首款基于asp.net技术开发的服务器管理软件.本系列软件是由沈阳泷泉信息技术有限公司独立自助开发完成,我司是一家以asp.net为主的技术型公司,我们的团队不仅汇集了国内顶尖的.net程序员和专业级的美工 更有着雄厚的资金及技术实力,立志做中国最优秀的服务器软件供应商. 目前本系列软件已正式发布两款,数据王域名虚拟主机管理系统,数据王IIS还原备份专家! 数据王域名虚拟主机管理系统 全球首创三个第一 第一个让虚拟主机用户支持防盗链 可自定义需要防盗的文件扩展名及被盗时

asp.net开发微信公众平台通过接口上传图片到微信服务器后台

问题描述 asp.net开发微信公众平台通过接口上传图片到微信服务器后台 asp.net开发微信公众平台通过接口上传图片到微信服务器后台,就要代码. ASCIIEncoding encodings = new ASCIIEncoding(); HttpWebResponse webResponses = null; string s = zone.Substring(0, zone.Length - 1); s = s.Substring(1, s.Length - 1); string img

【在线等】公司ASP.NET 开发的网站要搬到LINUX服务器上

问题描述 怎么在linux上搭建支持ASP.NET开发的网站?我安装好了MONO,接下来怎么办? 解决方案 解决方案二:传智博客上面好像是视频,去下撒?解决方案三:为什么啊,买不起WIN系统?解决方案四:公司有了一个linux服务器了在租一个win服务器浪费呀解决方案五: 解决方案六:或者装个windows的虚拟机解决方案七:Jexus网站资料:Mono官方说明:

(转)基于微软平台IIS/ASP.NET开发的大型网站有哪些?

问题描述 首先说明一下,本文绝不是要说Microsoft平台多么好,多么牛.只是要提醒一些LAMP/JAVA平台下的同志们,微软平台不至于像你们说的,和想象的那么不堪!只是你们自己不知道而已.同时,也希望广大Microsoft同志们不要太妄自菲薄,有点信心!下面一一列举几个:http://www.msn.com/http://www.live.com/(包括skydrive.hotmail等)http://www.bing.com/根据comScore今年11月份的统计,.如果对这基于windo

使用ASP.NET开发邮件发送系统

asp.net|发邮件 如今,随着Internet的迅速发展,许多企业都纷纷架构起自己的网站,用来开展企业的电子商务活动,如发布.管理企业自己的供求信息:发展和管理企业的会员等.除了这些以外,还有一点是十分重要的,就是向所有企业注册会员发送电子邮件,及时通知用户企业的最新消息. Microsoft公司推出Visual Studio.NET已有一段时间了,一些以前使用ASP开发WEB应用程序的网友,现在也慢慢地有ASP转向ASP.NET平台.为了能够帮助一些想使用ASP.NET开发邮件发送系统的网

在Dreamweaver中构建ASP.net开发环境

asp.net|dreamweaver 在开发网站,特别是开发网络数据库之前,首先应该认真构建好 Dreamweaver MX 2004+ASP.NET 开发环境.本例将向读者介绍如何在 Windows XP 操作系统下构建开发环境. 操作步骤 ( 1 )单击[开始]→[控制面板]. ( 2 )在弹出的[控制面板]窗口中双击[添加或删除程序]按钮图标,在弹出的[添加或删除程序]对话框中选择安装 IIS 服务器. ( 3 )安装好 IIS 服务器后,在[控制面板]窗口中单击管理工具,然后在弹出的[

利用ASP技术开发基于WWW的数据库检索程序

程序|数据|数据库  ASP是微软公司推出的用以取代CGI的新技术,是目前公认的建立Windows NT动态站点最好的工具.它与ADO(Active Data Object,一种新的数据访问模型)的充分结合,提供了强大的数据库访问功能,使之成为进行网上数据库管理的重要手段.     一.ASP简介   ASP内含于Internet Information Server(简称IIS3.0)中,扩展名以.asp表示.ASP文件可以用常规的文本编辑器编辑,也可以利用专门的辅助开发工具InterDev进

用ASP.NET开发Web服务的五则技巧

asp.net|web|web服务|技巧 一.禁用HTTP POST/GET协议 除非另外指定,否则,.NET将试图把Web服务绑定到三种协议:HTTP/POST.HTTP/GET和SOAP.之所以说"试图",是因为依赖于服务的参数和返回类型,HTTP/GET协议可能不可用..NET生成的WSDL文件将自动包含绑定这三种协议的指令,客户程序可以自由选择使用哪种协议与服务通信. 只要在Web.config文件中加入下列内容,就可以方便地删除对HTTP/POST和HTTP/GET协议的绑定

ASP.NET开发员工业绩评测中心

asp.net 摘要:本文介绍使用Asp.net开发一个软件公司内部员工业绩评测系统,包括后台所有员工信息管理,部门信息管理,所有部门评测细则信息管理:前台员工每月自我评测和主管对员工的评测.重点介绍数据库设计,以及重要Web服务端和页面控件的使用.笔者相信本文会对读者的数据库设计和使用Asp.net开发页面技术有很好的启发和帮助. 一. 系统体系结构 Visual Studio .NET 是微软公司迄今为止推出的最强大的,完整的开发工具,用于生成 Asp Web 应用程序.XML Web se