关于 web game 运算负载的只言片语

没办法整理成长篇大论了,就写点只言片语吧。
起因看这里:http://www.javaeye.com/topic/305801?page=1
-----------------
看了一遍,忍不住了,插句嘴~~

webgame 根本没有,也不需要什么大量实时数据要处理~~

例如类似部落战争的行军,这个其实早就根据所选兵种、指挥官、宝物等等生成了一个事件存放在事件队列中(可能是内存对象、可能是某种数据缓存更有可能是数据库的某条记录),然后服务器在那个事件事件到达的时候取出事件对象执行一下,得到一个结果,接着存起来。至于行军途中到哪个位置如何如何,那是给玩家想象的,服务器根本不管。总之,事件运算有三种方式:1。玩家请求时已经运算完成,到了特定时间通知玩家。2。事件执行时间运算完成,并通知玩家。3。在服务器空闲时,处理待处理的运算,到了特定时间通知玩家。

webgame, MMO 实时性不是首先考虑的。例如资源增长,如果服务器有 10W 激活用户,在同一时间增长资源是几乎不可能的。那就将一分钟划分60秒(废话),每秒开一个新线程来处理一部分用户(10W/60)的资源增长。资源增长基本上就是浮点数加减乘除,对于现在的 cpu 来说,并不是很高。何况服务器 N 个 cpu……

简单的说,webgame 不像 MMO 需要“随时”客户端跟服务器端通讯。更多情况,web 服务器通过某种方式从 game server 中获得一个当前游戏状态的快照返回到浏览器。并从浏览器接收数据,然后在一个可接受的,合理的时间内去修改 game server 的状态。请再次注意,again!这不是“实时”的!

最后再罗嗦一下,webgame 的 game server 更多情况下是一个 task server。它不需要去预测客户端行为,也不需要计算碰撞、寻找可行路径……
另外,我个人的体会,RPG 类型的 webgame 在运算负载上来说,远小于策略形的。并且通常只需要 3 台服务器配合:web server、task server、db server。

哦,还有,如果用 flash 的 socket 方式开发,不在上述范围内。当这种模式是个客户端能力稍差的 MMO 好了。

Join the Conversation

3 Comments

  1. 这种问题,我的想法是..想用web语言做了再说,真能运作到有负载的时候再说,
    那个时候解决也不迟,毕竟项目有了希望了..

    空谈这个破问题毫无必要..从产品角度毫无必要,从程序员角度也无必要(增加工作量),
    甚至技术角度也无必要,负载要做的好,就得针对性的进行优化,我现在基本有一个认定..
    人是不可能把一件复杂的项目思考的太细而面面俱到,是人的大脑没这么能力,做项目就是问题叠着问题,一个一个解决过来的..
    设计只是让程序员在编码过程中别迷失了方向,导致项目功能本身有了致命的冲突而很难解决..所有需要设计这么一个全盘考虑的过程
    当然了,老板能忍耐半个月以上设计时间的项目,我从来没接触过..

  2. 搞 webgame 的确很有意思,更有意思的是给一个没钱的公司搞 webgame,更更有意思的是给一个没钱没时间的公司搞 webgame,最后只能搞出来一个跟设计时完全不一样的 webgame 半成品,因此搞 webgame 只能给有钱有时间的公司搞。

Leave a comment

Your email address will not be published. Required fields are marked *