`
Foxswily
  • 浏览: 77429 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

开心网外挂编写总结

阅读更多

总结写开心外挂的心得

对开心网的外挂编写做个总结,避免弯路。

  • 设计篇

          针对需求的设计——需求向实现的转化

                从调查切入点开始考虑如何着手,确定了基本的方式到写代码,并没有花太多精力,http访问、html解析都不复杂,但后续需求考虑不足造成最初的设计不能满足后续需要。比如后续加入的新模块轮询检索,定时执行都推翻了最初的设计。在设计阶段多大程度上为后续预留扩展余地有待思考。
          避免过度设计
                小程序貌似没有这个问题,基本上能减的都减了^_^ 个人编程更多的是偷懒避免了过多代码。
          别为选择耽误时间
                左右为难的选择未必是阻碍进程的瓶颈。为几个技术选择或者解决方案思考了很久,其实这些点都不是阻碍开发的地方,一旦确定一条路,剩下的就是解决这条路上的问题了。

  •  技术细节篇

           事前分析URL VS. 解析页面

                 简单一个例子,要取得B页面的信息需要经过A页面(如登录),开发中的想法有:
                       1.预先分析B页面的URL特点,从A页面拼接取得(URL中有随机的Key,需要在A页面取得)。
                       2.解析A页面中通往B页面的链接。
           方法1更直接,Key的解析针对字符做regex查找即可,但缺点是一旦URL改动或者Key的方式改动要重新分析。
           方法2站在网站外的视角,直接根据链接名称查找链接地址,缺点同样明显,页面名称不能变化,比如:“组件”这个链接名不能变,否则就找不到了。
           最终选择了方法2,使用了比较旧的htmlparser,但扩展简单。

           定时任务的控制
                 预订时间执行预订动作,使用了JDK自带的Timer,绝对的lightweight,API中提到的执行不准的情况忽略不计。整体控制方式:主进程控制子线程,子线程控制TimerTask线程。必要的线程间数据共享使用了ConcurrentSkipListSet,主要是考虑线程安全、可排序和无冗余。

           双缓存
                 从Swing的双缓存思想得来,实际就是转移长时间操作的瓶颈,解决预订任务队列的更新问题,效果确实不错。

           错误恢复
                 对长期自动执行来说,如果发生异常应该有一定的自我恢复能力,比如网络不通造成的异常等等。解决方式用子线程调用TimerTask的方式避免异常造成彻底中断,同时不会因为异常反复发请求。瞬时错误恢复没有解决,比如执行停车失败,会跳过这个车位,查找下一个,此时的错误状态等等没有细考虑。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics