没办法整理成长篇大论了,就写点只言片语吧。
起因看这里: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 好了。