目前的一个网站如下:http://www.cha66.com/
比如在这里查询单号 :http://www.cha66.com/ems_kuaidi_danhao_chaxun.aspx
网站处理查询请求过程如下:
ajax请求。
 ajax.request("/ajax/kuaidi_api.aspx",formData);
这个kuaidi_api.aspx页面处理所有不同类型的快递查询。kuaidi_api.aspx页面中调用写在app_code中的一个类pagespider。由pagespider类抓取网页信息。然后kuaidi_api.aspx把信息返回来.客户端显示。
我朋友在用此套源码。开始没有问题。但后在访问量大后出问题了。
比如这个人正在查 ems 中( http://www.cha66.com/ems_kuaidi_danhao_chaxun.aspx)
那么其它人则无法查询 ems 或其它快递了。好像阻塞起了。1.asp.net是单线程的?
2.是因为写在app_code中的原因吗?那把这个pagespider写到dll中去?
3.那么把pagespider的代码提取出来。放到每个页面中去。能解决吗?(我猜不能。等会儿得试一下)。但这样一来。不好维护了。改一个地儿改全部。哪位有好办法啊?现在朋友的站每天有7/8000的ip的样子才这点我的程序就抗不住了。不能丢这面子。。我在网上找到的资料就是异步。哪位朋友再多给点资料?

解决方案 »

  1.   

    wasp.net本身就是多线程处理的
    处理比较大量的数据,使用多个线程处理
    优化业务逻辑,多用户怎么处理
    高并发使用缓存,负载均衡
    相关 http://topic.csdn.net/u/20100106/16/f426b5f7-55da-44f0-adba-c67803730f49.html
      

  2.   

    不是保密的。我上边也写了啊?可能是没写清楚。pagespider就是请求网页内容的。就是webreqeust。
    代码太长了。因为网址太多。
    类似pagespier.getcontent(string url)
    kuaidi_api.aspx页面无非就是调用这个getcontent然后返回。没得其它啥了。流程就是这样。
    代码也就是这个样子。
    不知道是不是pagespider是静态类的原因。所有请求都用同一个类?等会去试试
      

  3.   

    没解决。我把代码贴上来了。本地没问题。但传到服务器上就出了这问题。
    spier.cs
    /// <summary>
    /// Summary description for Spider
    /// </summary>
    public static class Spider
    {
        public static void a()
        {
            Thread.Sleep(20000);
        }
        public static void b()
        {
        }
    }test.asp
    public partial class test : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Request.QueryString["t"] != null)
            {
                Spider.a();
            }
            else
            {
                Spider.b();
            }
            Response.Write("a");
        }
    }代码就是这样。
    测试网址为:http://www.cha55.org/test.aspx?t=x与http://www.cha55.org/test.aspx
    目的很明显。但是在服务器上。只要打开有?t=x的网页。test.aspx只有等有?t=x的网页打开完了才显示。
    但在本地却不是这样。实在搞不懂了。