http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 3976|回复: 1

[综合] HttpHelper异步版压力测试(填坑)

[复制链接]
发表于 2014-5-27 09:06:01 | 显示全部楼层 |阅读模式
好了 昨天说道HttpHelper异步版的实现 今天奉上HttpHelper异步版的压力测试,顺便把昨天的坑给填了。实际使用异步类的过程中,我们需要知道爬虫什么时候爬完了,或者说任务爬干净了。好了 ,这里需要引入计数器。先定义两个接口。
[C#] 纯文本查看 复制代码
 public interface ISetRelease
    {
        void SetRelease(IRelease release);
    }


[C#] 纯文本查看 复制代码
 public interface IRelease
    {
        void Release();
    }


然后定义一个任务类,用来完成任务。
[C#] 纯文本查看 复制代码
 public class MyTask : ISetRelease
    {
        AsyncHttpHelper target = new AsyncHttpHelper();
        HttpItem objhttpItem = new HttpItem();

        public void DoWork()
        {
            objhttpItem.URL = "http://myhb.qq.com/f-1001229421-1.htm";
            objhttpItem.urlGuid = Guid.NewGuid().ToString();
            target.GetHtmlDataAsync(objhttpItem, CallBack);
        }


        void CallBack(HttpResult resul)
        {
            TraceDic.RemoveUrl(resul.Guid);
            release.Release();
        }


        IRelease release;
        public void SetRelease(IRelease release)
        {
            this.release = release;
        }

    }


大家发现了TraceDic.RemoveUrl(resul.Guid);
这句话是干吗的呢,如果大家注意看我的前一篇帖子,就会发现    TraceDic.AddAsyncUrl(objhttpItem.urlGuid, objhttpItem.URL);
好了,这个追踪字典就是用来记录实际使用过程中,记录还有哪些Url仍在爬去的,做Trace用的。实际项目中,当然要干掉了。
现在再来定义一个任务管理器,也不是什么高深的东西了。
[C#] 纯文本查看 复制代码
  class MyTaskManager : IRelease
    {
        private int m_cycleCount = 100;
        private int m_count = 0;
        object m_lock = new object();

        public void DoWork()
        {
            for (int i = 0; i < m_cycleCount; i++)
            {
                lock (m_lock)
                {
                    if (m_count >= 7)
                        Monitor.Wait(m_lock);
                    m_count++;
                    Trace.TraceInformation("in  m_count " + m_count);
                }
                MyTask m_task = new MyTask();
                m_task.SetRelease(this);
                m_task.DoWork();
                m_task = null;
                GC.Collect();
            }
        }

        public void Release()
        {
            lock (m_lock)
            {
                m_count--;
                Trace.TraceInformation("Out m_count--  " + m_count);
                Trace.TraceInformation(Spider.DataControl.SpiderTrace.TraceDic.GetString());
                if (m_count < 7)
                    Monitor.Pulse(m_lock);
            }

        }
    }


这个任务管理器负责任务的调度。可以控制同时爬取的链接数。好了,这里使用的是混合构造Monitor,大家对于.net中的线程同步如果有问题,还请自行Google好了,这里不重复介绍。
好了,接下来编写单元测试。
[C#] 纯文本查看 复制代码
[TestMethod()]
        public void GetHtmlDataAsyncTest()
        {
            MyTaskManager m_manager = new MyTaskManager();
            m_manager.DoWork();
            System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite);
            Assert.Inconclusive("无法验证不返回值的方法。");
        }


让单元测试线程沉睡,我们来观察Trace记录,这里的任务数我定的一百个,大家可以随意定。

QTAgent32.exe Information: 0 : in  m_count 7
QTAgent32.exe Information: 0 : Out m_count--  6
QTAgent32.exe Information: 0 :
3775878c-e2c9-420c-a6d6-0065575e5f23    2014/5/27 8:53:29   http://myhb.qq.com/f-1001229421-1.htm
8933b768-d894-422e-b14b-d1479a023e46    2014/5/27 8:53:38   http://myhb.qq.com/f-1001229421-1.htm
ff2994cd-d18b-435e-8612-2e94c1738377    2014/5/27 8:51:56   http://myhb.qq.com/f-1001229421-1.htm
a1facd72-ab1d-4fda-ab13-88629626896a    2014/5/27 8:53:16   http://myhb.qq.com/f-1001229421-1.htm
4309c8cf-7566-4f2a-80e6-d34d4166011e    2014/5/27 8:53:29   http://myhb.qq.com/f-1001229421-1.htm
e8d114f5-e91b-4721-bfe6-8a9102b86a0b    2014/5/27 8:52:34   http://myhb.qq.com/f-1001229421-1.htm

。。。。。。
好了,源码将在下一篇奉上,同时要提出一个难题了,继续埋个坑。
















1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2014-6-1 10:51:14 | 显示全部楼层
已跳!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-5-15 05:42

© 2014-2021

快速回复 返回顶部 返回列表