• 全部
  • 问答

欢迎大家来讨论网络游戏

sunxking 2003-05-22 08:40:35
请大家先看一下我的文章:
http://www.csdn.net/develop/article/18/18381.shtm

不管你有什么想法,是架构上的,还是技术上的,还是观念上的,只要跟网络游戏有关,都可以来叙叙,敬请发表自己的看法,希望大家把自己的想法都贴出来,共同交流,共同进步!
...全文
54 点赞 收藏 27
写回复
27 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
sunxking 2003-08-22
好久不来了,今天有一点点时间了:
to tarkey(天星) :实际上,每个用户开个线程只是一个基础模型,真正用的模型我后来的文章同提到的连接池,或者,完成端口,只是unix下用不了罢了。

to whoke(hy):你好,假设是发送数据,不管是阻塞还是非阻塞,都只有一个目的,就是把数据copy到发送缓冲区中(并没有发送),如果copy的时候发现缓冲区中还有数据没有发完,或者一次copy不下,此时,阻塞模式的话就sleep了,非阻塞模式的话,就立马返回copy的数量,因此用非阻塞的话,就得自己再封装一套发送接受机制。你说阻塞的话,会遇到问题,会遇到什么问题呢?如果真的用非阻塞,你有什么好的方案呢。
回复
whoke 2003-07-06
to 楼主:
对于non blocking 的传输机制你的理解好像有问题。底层传输时是按缓冲区来进行的,每次传送的内容都是一个大数据块。没有收到对方应答就会重新发送这一块。所以blocking 和non blocking的可靠性是一样的。不过在很多人设计网络应用程序时,按bolcking方式接收数据包会出现问题。
回复
tarkey 2003-06-17
看了楼主的文章,不知道你的服务器能支持多少人的走路信息?
主进程用非阻塞的select写的网络游戏服务器,在p4 1.6G上跑,每秒可以处理15000条切格子的消息.不知道楼主的服务器能支持多少?

每个用户开个线程个人认为非常之不现实.
回复
tarkey 2003-06-17
对于同步,有一种叫load balancing的技术。
回复
lzlutao 2003-06-17
我研究过传奇2。0和韩国3。0。NPC和怪物都通过脚本来实现,包括在什么地图的什么坐标刷多少只怪物,在什么坐标出现什么NPC。而这些NPC和怪物的形态和动作以及其他属性又主服务器程序通过脚本从SQL数据库中读取
回复
wz蝈蝈 2003-05-29
是老掉牙了
做个模拟中国历史变化的说不定有更广大的市场
回复
sunxking 2003-05-28
TO nichotilikai(nichoti) :
同意你的说法,三国和武侠,确实是.....呵呵
各位贵网络游戏有什么建议,有什么创意,来谈谈啊
在下洗耳恭听
回复
qnzu 2003-05-28
我到很想听听大家对《傲视三国》的看法。为什么那么少人玩?设计问题?技术问题?
回复
nichotilikai 2003-05-27
技术问题只要下苦功都是可以解决的,我入行时间不长,但体会到游戏作为一个商品,能否成功的第一关键是设计人员的艺术,是否能设计出能吸引人的游戏,中国虽有悠久的文化,但一些题材被做烂了,比如三国和武侠,快成游戏设计人员的传家宝了。
回复
wz蝈蝈 2003-05-27
速度加快一点,还是可以容忍的吧。呵呵
其实可以这样的判断,比如心跳是每秒一次,那么判断
如果10秒超过20次或者少有5,就算使用加速,
如果30秒超过40次或者少有20次,
如果60秒超过70次或者少于50次
如果120秒超过130次,或者少有110次 这些都算使用变速器
如果使用Tcp连接,在很长的时间里,如果客户端没有断线,它的心跳包的发包量应该和服务器保持一致的
回复
libi 2003-05-27
游戏世界的活动对象可以分为两类,一是怪物和npc,这些是由计算机控制的,可以像你所说,用遍历的方法或者分配时间片来管理,但另一类是玩家这种角色,不可能使用这种方式,因为角色是由玩家控制,服务器只处理命令和事件,这肯定得用异步处理方式。但屏幕范围内的活动对象较多时,计算机用于处理交互的时间就增加,就应该把分配给怪物和npc的cpu时间减少,来平衡玩家和怪物之间的速度。当然如何去平衡,要看具体的控制方法,这是比较麻烦的。
网络同步的问题是不容忽视的,除非是局域网游戏。像《传奇》游戏,你可以看到人跑了几步被弹回来的情形,这就是一种同步处理的现象,没有这种同步处理,《传奇》决没有现在这么流畅。最近在玩《天骄》,游戏不错,可惜就是同步处理得太差,唉,毕竟是国产游戏。
关于网络同步的问题,我了解也不深,这个版里有几篇帖子讨论,我就不班门弄斧了。
回复
sunxking 2003-05-26
关于变速齿轮的问题:
我认为这个问题有很多的解决方法,而且事实上不同的游戏用的方法也不同。所以很多游戏都会给变速齿轮留下一些空挡。
zgp() 说判断心跳包的快慢就是解决的一个很好的办法,不过他说变慢就说明是出了问题,我觉得心跳变快变慢都说明出了问题,特别是变快了(网络游戏一般不会用到变速齿轮的减速功能的),只要一变快,那就可以善后处理了,呵呵
但是这种办法也有一定的弊端,有的玩家就用1.1或1。2倍的速度,结果服务器就不会报错,比如红月就是这样。
回复
sunxking 2003-05-26
tp libi(风自吟) :
对,游戏世界的对象管理是个很难的问题,不过,其实他的管理方法和单机版的游戏原理上差不多,都是在一定的时间间隔内遍历待管理的对象队列。对于同步问题,其实真正的同步是不可能的,因为玩家受到消息报时间都不一样,不过这个不一样的时间差是很短的,所以看起来同步,明白了这一点,就可以解决同步问题了,事实上,如果你亲自试试就会发现,把通一条消息发给几十个玩家(在同一个屏幕内的玩家一般不会很多),同步还是很容易实现的
回复
wz蝈蝈 2003-05-26
to:5drush
wyly已经给你解答了啊。
如果使用了变速齿轮,那么这个心跳会很慢,甚至会停止,服务器就可以把它断开了
回复
ENIGMATOO 2003-05-25
学习
回复
5drush 2003-05-25
还有外挂问题,如何检测玩家使用了外挂?比如加速齿轮什么的?
回复
sunxking 2003-05-24
to oyiboy(游离元素) :
我也觉得这个一定的时间间隔确实很难控制,呵呵。
可以看出很多游戏控制的都不是很好,很多时候玩家调线后再进入时,早已被砍死了,但是这也是没有办法的事,如果我们检测时间较短,且玩家一调线后让他们出于保护状态的话,最容易发生的一种事就是玩家临死时就拔线,那样又会破坏游戏的可玩性,所以,游戏厂商做出的选择就是让大家活活被砍死,呵呵。
你仔细想想,其实除了这个办法以外目前也没有什么解决的办法。
回复
libi 2003-05-24
看了你的文章,觉得你还有两个关键的技术没提,那就是同步和负载平衡。
同步就是指克服网络延时,使每个客户端所看到的都是同一时间的事件,没有谁超前落后,这可以说是最关键,也是最难的技术。
负载平衡指所有的角色都应该获得同等的响应时间,不使一些卡,一些不卡。因为怪物和npc由计算机控制,分配给它们的cpu资源如何调整,使得它们的速度不至于太快或太慢,以及玩家之间的平衡,这也是一个棘手的问题。
回复
sunxking 2003-05-23
to blade2001() :
其实,处理方法和一般RPG基本一致,在第4篇文章中,我将详细谈这个问题,希望到时候关注。

回复
sunxking 2003-05-23
to zwjchina(蒲石) :
你说的这个问题原因就在于,在没有数据传输的时候,不管拔了线还是插上线,状态都是没有数据传输,所以在不通讯的时候,插上和断开是一样的,反正没流量。
传少量数据数据没问题,其实这只是一个假象,因为他传得太快了,在拔线前就传玩了,在真正的游戏中时,这将成为重大错误的隐患,所以我才说用阻塞模式这是这个用意(阻塞模式下,传输中拔线,再断开,再插上,还可以接着传)。
对于“客户端非正常关机,服务器却会错误的认为客户段还在线,因为该连接没有出现异常”这个问题,解决方法一般是:客户端按时的发些数据包给服务器,如果服务器超过一定的时间间隔后没有受到数据报,那就认为此用户断线了,于是进行善后工作。

回复
相关推荐
发帖
游戏开发
创建于2007-08-27

7920

社区成员

游戏开发相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2003-05-22 08:40
社区公告
暂无公告