zoukankan      html  css  js  c++  java
  • ASP.NET2.0下实现分布式StateServer(状态服务器)

    在一个asp.net1.x时代,我们一个站点的状态服务器(或者叫会话服务器),最多只能有一台,一台服务器在中小型网站下问题还不大,一旦网站到了一定的规模,状态服务器会压力很大。asp.net从2.0开始就对状态服务提供了基于Hash的负载均衡策略。下面具体谈一下这种策略的实现方式。 一、配置文件:
    修改SessionState配置节 <SessionState                        mode="StateServer"
               timeout="20"             partitionResolverType=                 "mySessionState.PartitionResolver" />    
    增加多个SessionState的地址 <appSettings>
        <add key="StateServers" value="tcpip=192.168.10.1:42424,tcpip=192.168.10.2:42424"/>    </appSettings>

    二、实现一个partitionResolver类来支持分布式 这里的PartitionResolver类就是SessionState配置节的   partitionResolverType= "mySessionState.PartitionResolver" asp.net的状态管理模块会自动调用该类的ResolvePartition方法,来找到当前的Session应该访问那台状态服务器,就不多说了 ,看看代码一切就都明白了! public class PartitionResolver : System.Web.IPartitionResolver       {         private String[] partitions;

            public void Initialize ( )         {             // create the partition connection string table               partitions =AppSetting.StateServerList.Split( new char[]{','} );         }

            public String ResolvePartition ( Object key )         {             String sid =key as string;

               // hash the incoming session ID into               // one of the available partitions             int partitionID = Math.Abs( sid.GetHashCode() ) % partitions.Length;

                return partitions[partitionID];         }  

        }

    另外除了使用以上微软的的策略,你还可以实现自定义的session Module,这个时候状态服务器就可以任意选择了,你可以选择开源的MemCached,或者用.NET Remoting自己实现一个Session Store

  • 相关阅读:
    linux 经常使用网络命令
    ExtJS学习--------Ext.Element中其它操作方法学习
    对“使用MyEclipse,写的jsp代码因有汉字而无法保存”问题的解决
    SQL之case when then用法
    SQL之CASE WHEN用法详解[1]
    [SQL case when的两种用法]
    在delphi中生成GUID
    在delphi中生成GUID/自动获取临时表名......
    Delphi中Owner和Parent的区别
    Delphi处理数据网格DBGrid的编辑框 获取还没有提交到数据集的字段文本
  • 原文地址:https://www.cnblogs.com/chenzhao/p/2597051.html
Copyright © 2011-2022 走看看