作者Taniwha ()
看板GameDesign
标题Re: [问题] 请益 MMOG 系统架构设计概念
时间Mon Dec 17 17:59:18 2007
※ 引述《jerohands (这就是人生啊)》之铭言:
: 各位好,我想请教 MMO 开发在伺服器和客户端的系统设计概念,
: 目前我自己也有写一套,但跟目前线上游戏作比较,
: 在人物状态更新上相形之下逊色很多,会顿...
: 我来说说我的作法:
: ===============================
: 客户端:使用 RTP 传送资料
: 1.设定 TIMER 在 MsgProc 中固定每 33毫秒(frame rate 30/sec)
: 发送自己的状态到伺服器。
: 2.在「程式主体」中接收使用者输入改变自己状态,和上一个回圈的状态比较,
: 有改变且时间相隔 33毫秒以上,则发送自己的状态到伺服器。随後再更新其他
: 玩家的状态,更新的方法是依据上一次接收到的状态预测这次的位置和状态
: (我不晓得这一步更新其他玩家是不是有画蛇添足...)。
: ===============================
: 伺服器端:使用 TCP 传送资料
: 1.接收到玩家送来的 RTP 封包,更新这位玩家在伺服器中的状态,
: 然後广播给其他玩家。
: 2.程式主体中每个回圈每 100毫秒发送每个玩家状态给其他在线的玩家。
: ===============================
: 伺服器端我有尝试改用 RTP 传送资料封包,但对於动态浮动 IP 的客户端,
: 会接收不到...
: 我的问题是,一般 MMOG 伺服器端和客户端在更新人物资料时
: 有什麽机制?UDP?Multi-Thread?
: 请指教。
我所知道的做法是 Non-Blocking + Multi-Thread 的形式,如果不排斥英
文的话,建议你到 Gamedev.net 去看关於伺服器架构的程式观念,里面有
很详细的介绍。
基本上伺服器端如果不用 MultiThread 就会一直处於忙碌的状态,观念上
必须要修正成,我要如何做到让伺服器不会因为某些事情就停下来,要有
一个全体都能兼顾的型态,这样的程式写法,这个是大概的 Non-Blocking
概念,因为碍於规约,我不能讲太多,上面提到的 Gamedev.net 就有很详
细的介绍与程式范例,建议你花点时间研究罗 ^^
http://www.gamedev.net/reference/list.asp?categoryid=30
直接贴上连结,希望对你有帮助,里面大概应该知道的都有说了。
※ 编辑: Taniwha 来自: 122.146.195.131 (12/17 18:06)
1F:推 jerohands:感谢a大和T大提供意见,不过关於 NAT 打洞这点我还是 12/17 18:37
2F:→ jerohands:是没什麽概念.. 12/17 18:38
3F:→ whereweare:TURN/STUN/ICE... 12/19 11:29