Dirain的开源地带

思想在进步
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
New Document 开心网在一个月前推出了一款新组件,买房子里的“花园”,相信玩开心的朋友都知道。就是种植种子,然后种子会在N小时后成熟,成熟你可以收获你的果子赚取一定金额,同时如果你不及时收割你的果实会被好友偷走。

今天想聊一聊花园,分析一下开心网的“程序员”。这个组件的实现难度不高,非常简单,可能需要着重讨论的功能只有一个。就是种子如何成熟?

首先来猜测一下开心网以前的实现方式,从种子播种的那一刻起,就谁记录一个播种时间(必然的),比如说胡萝卜的成熟时间是12小时,那么如何通过这 个程序让种子在12小时之后变为成熟状态呢?昨天开心网做了一次更新,他的成熟时间精确到秒了,还剩多少秒成熟,以前都是精确到分钟的,并且过了这个分钟 之后还会有一个“即将成熟”的过程。因为我比较喜欢做小程序,所以做过花园辅助工具,我自己会根据成熟时间去计算最终成熟时间,然后让程序自动在第一时间 偷取好友果实,收获自己果实。但程序计算出来的时间非常精确,但由于开心网还有一个“即将成熟”的阶段,而且即将成熟的阶段的时间是随机的,有时候需要很 久还不成熟。我一直在猜测为什么会有这个过程,这纯属鸡肋。

如果按着我自己的实现方式去实现花园种子成熟,我会在播种时记录一个播种时间,然后数据库里记录种子状态和播种时间就好了,至于如何去成熟,其实这 都不用去考虑,非常简单。只需要在开心网用户访问某个花园页面时,在页面读取结果显示的时候做个计算就可以了,计算播种时间与果实需要多久成熟,这就可以 计算出一个最终成熟时间。如果当前时间已经过了成熟时间,那么这个时候把种子状态变为已成熟,并返回给用户一个状态。

上面是我想的方式,但我猜测了许久后,终于明白开心网为什么会有即将成熟的过程了(只是猜测)。原因很简单,我怀疑他们的程序员有点问题(找不到形 容词了),猜测他们可能是写了个程序或者服务一类的东西,每秒钟去扫描数据库结果,发现成熟就把他变为成熟状态。这样就可以解释为什么有“即将成熟”的状 态了,因为开心网全站玩花园的人相信不在少数,如果一个程序遍历扫描,当扫到你果园信息的时候他是有延迟的,所以会出现即是成熟的时间是随机的,没准是多 久。这个推断很合理的解释我们所见到的一切,这样去做也可以解释为什么开心网推出花园组件之后网站开始比以前慢,而且花园bug无数。但是昨天,开心网可 能改了花园的成熟方式,应该很像我上面说到的那种方式。用户A自己或者用户A的好友访问用户A的花园时肯定需要读取一次数据库的花园信息记录,这个时候可 以在服务器端响应时把播种时间、成熟时间和当前时间做一个计算,完全可以知道现在是否果实熟了,如果没熟则计算当前时间和成熟时间的时间差显示给用户,这 样就可以把成熟时间精确到秒。

下面这段是属于个人猜测,不一定属实,仅供参考。至于之前为什么有即将成熟,为什么用扫描的方式去实现(只是猜测而已)。我想这也很 好解释,可能是开心网程序员和项目经理在讨论时遇到一个问题,“万一用户不访问那不就无法成熟了?”。如果真的是这样想,那我真太佩服他们程序员的水平 了。假设现在发生了那个问题,如果用户不访问就不成熟,库里一直是未成熟状态,如果真发生了这样情况,那又何妨??用户A和A的好友都不去访问A的花园, 比如播种时间是夜里0点,成熟时间是12点,可到了12点A和A的所有好友都没有访问过,就算不成熟,数据库的状态是未成熟,那也没有人知道,人们都以为 12点就熟了,只是我们开发者知道实际上数据库里状态还没成熟而已。但当12点过了,有任何一个A自己或者A的好友访问花园,看到的就是成熟状态了。该收 获的收获,该偷取的偷取,什么都不会影响。这样就省了太多的扫描资源,因为之前自己做过预定短信,用C#写了个服务一天24小时扫描,库里短信号码数量有 几十万甚至上百万,用户定时发送,如果单线程扫描的话碰见多个可操作信息,那要导致后面的用户拖延很久的,这跟开心网出现即将成熟的状态类似。除非花成本 为每个信息开启一个线程,我想这样太复杂了。这段信息都是我的猜测,仅供讲解与参考。

就写到这里,园子里有喜欢开心网的朋友可以看看我的代码,我写过一个花园辅助程序,全自动操作,详情我不多介绍,可以到我的网站去看 www.gaoxinga.com

既然我的博客是一个开源博客,那么我就像各位分享一下我辅助工具的代码,这个工具日下载量1万以上,日使用量达到超过1.5万,有svn,我会定期提交,可以随时看到最新代码,但这个程序用户催的比较急,所以更新频率过高,导致代码很乱,凑合看吧。

svn详见:http://www.gaoxinga.com/thread-5139-1-1.html   QQ交流群:63864931 (都是热爱开心网的程序员)

 

 

从开心网近几天爆出无数收获的BUG之后,由此可以得出我的推断是正确的,哈哈。