.......................... (300分)

  • 主题发起人 主题发起人 bluely
  • 开始时间 开始时间
........................
 
同意:bluely,
在Windows下编程,不管用任何语言,其本质就是调用操作系统的底层功能
(只有极少的情况直接对硬件进行处理)
所以用任何语言意义并不大,C和Delphi都是对Win APi的封装
也许封装后增加了易用性,当然有点多余的代码
不过,经编译器优化形成二进制代码后C和Delphi那一个执行的效率更高,很难说
最主要的是看设计者的程序是否优化和简洁;
在程序效率的问题上,结构和方法的设计远远比语言的选择更重要

以上的问题我认为:
1.首先数据库服务器至关重要 性能够快
2.应用服务器采用 Pool 缓冲池技术实现
3.采用N个应用服务器
4.使用企业中介对象进行容错与负载平衡处理
5.游戏分区 分地图对一定量的游戏者进行服务
6.游戏注册信息 充值信息 玩家状态 各由1-N 个服务器分开运行
 
TO bluely
你是想和我要源代码吗?哪个我已经卖给别人了
不过我可以提供给你主要技术。说不定以后还可以合作。

我发现你强调在线人数,其实这不是主要问题,
我在处理分布问题的时候,想出了一种很好的方法
在不同的场景里,连接不同的服务器,可以有效提高整体速度
服务器直接做数据库订阅,同步就可以了,
你肯定明白这样的好处,做法也很简单,ORACLE和MS SQL都有同步功能

还有,提供速度的方法是减少通讯量
尽量只向服务器传递用户操作命令
为了防止网络错误,可以定时刷新场景,
我把每个用户做为一个单元,独立地处理自己的事物。
我把每个命令划分得更加细致,而称其为状态,
执行每个状态时所需要的参数的执行的步骤是最简化的。
每个命令都是由一个或多个状态组成的。
一个状态满足后就自动转向下一个状态。
我为每个状态都编写专门的开始,运行中,和结束代码。
这样每个用户都在独立地按照顺序处理自己的事务,
一个个复杂的单元行动就变得有条有理了。

这样做服务器与用户的通讯是非常小的
比如,发出一个攻击命令,只需要向服务器发出1个字节的数据就可以了。
其他的参数有服务器临时的数据来判断。
总之,写网络游戏是很简单的,而且很有趣。
你可以自己创造一些新的方法,来优化在线和管理。
 
......................
 
我本没有否定哪种语言,却被你们给戴上了一个在delphi社区否定delphi的大帽子。真的是比
窦娥还冤。:)
不过话又说回来,如果在工作压力非常大的地方,使用不知道底细的控件,这我确定不是
理智和全面地考虑。delphi的编译器确实是一流的,但是被编译的对象呢?如果没有很仔细的
内存控制和线(进)程管理。肯定是会崩溃的。
 
据说用iocp会好些。。。不过限制在windows平台了
 
to bluely:

你可不可以把你的QQ留给我?我有不少的困难,请你指导我一下,你要多少分都有行,
我还有2200多分
 
.............................
 
大家好:)

这是我第一次在这儿发贴!希望大家多多关照:)

我在uestc,我在学校参与了我们uestc Diablo站网的架构!

对diablo的服务器有一点点认识:)

diablo的服务器是分布式的!diablo的站网一共分3层

1。一台主服务器在清华主要记录帐号

和登陆确定!

2。旗下是“国度”一层,负责聊天,创建游戏的分布!

和游戏列表,保存人物记录等!

3。再下一层就是具体建立游戏,进行时时数据交换的一层

应该说第三层是主要的数据交换,是用vc写的控制台程序

使用的winnt的dcom技术,好的机器可以支持几百个游戏

一般的机器支持40~50个游戏,对系统占用不超过20%


但daiblo和《金庸online》这类的网络游戏不一样,对分布

式处理的同步要求不如后一类强!

以上就是在下从daiblo中悟出的一点点对网络游戏结构认识!
 
感谢rosebush的回答
 
grhunter你这个坑子,嗬嗬,尽挑这些肯定不用付钱的说请客:)

好像你最近混得不错呀

讨论归讨论,传奇的服务器不是1w/台,先说明了,网络游戏的开发讨论是个好话题,但是没有必要走弯路。

传奇是delphi+delphix的,所以,大家也不要对delphi写游戏没信心,

sonicyou是个达人的说,有空我们可以聊聊

最后,网络游戏的结构比算法重要太多,当初我这么提醒大话西游的人,可惜他们不相信,最后只能吃苦头
 
以下是我对传奇的猜想:

传奇每个服务器组好像可以支撑4000~5000在线,每个服务器组有比奇,沃马,蛇谷,盟重4个
分开的服务器,操作系统应该是Win2K,每个服务器都连接一个独立的SQL SERVER 2000来保存
玩家数据,SQL SERVER 2000之间通过订阅和发布来同步(肯定不是跨服务器事务).
另外它应该还有一个独立的短信服务器,负责玩家的交谈和广播.这就用不到数据库了.

传奇的前台机器只负责收发数据,用的是TCP连接,然后在和SQL SERVER 2000交互,应该不是
用BDE,而是ADO吧.肯定用了Pooling.

这么计算传奇每个服务器基本就是1000~1500个连接,而且服务器之间逻辑上独立的,
它们之间共享的DATABASE来传递数据.

另外感觉传奇SQL SERVER 2000之间同步有问题(通过转换服务器来复制道具),本来这可以
通过事务来解决,但韩国佬死都不这么干,一定是由于开销太大,PC服务器的性能不够吧.

以上只是猜想,不知对不对
 
赫赫,牛人,猜对一半
 
更正一下对传奇的猜想,

是5个服务器(比奇,沃马,蛇谷,盟重,蜈蚣),SQL SERVRE 可能只有一个,这5个服务器都
读取和写入这个DATABASE.
短信服务(serverice,可以不是独立的机器)应该是有的
还可能有监测和过滤servreice(可以不是独立的服务器),是监测和认证Tcp数据是否正常的.

还有,楼上sonicyou说的某个玩家ID是个object,对它编写一系列状态,然后把状态打包成某个action.
客户端只要发action的第一个状态就可以完成这个action,这样可以节省带宽.

但传奇不是这样,它的动作,比如攻击,分为举起手臂,抡刀1/4,抡刀1/2.抡刀3/4,碰撞,
碰撞后的判断这几个部分,每一个部分都要发到客户端并要客户端显示了才会执行下一
部分.这样对服务器的压力是很重的,对网络的lag是很敏感的.难道这么做只是为了防止
加速吗?

我也认可DNChen的架构比算法重要的说法,毕竟架构和算法对解决问题不是同一层面的东西.
如果传奇用使用深蓝做服务器端,统一数据库,所有场景都用一台很牛而且可以更牛的机器,然后接入服务器可以多台.
这样就可以有效避免许多问题,编程也简单和轻松许多.而且真正能支持万人以上在线,这可舒服了.
 
分布式服务器解决你说的问题
 
大家讲得很好啊。300分不够分了,帖子结束后我再加300来分啊
 
hoho,谁说传奇用sqlserver?

另外,不要片面强调一台服务器支持多少人,对于商业化的网络游戏,这绝对不是最重要的。


 
我对传奇的描述都是我的猜想
而且我不想强调一台服务器能支持多少人.
只是简单而统一的架构可以让编程更简单.仅此而已
 
想到传奇我就想哭,我的号被盗了
:(
 
盗号了就去查密码呀,除非你当初乱填初始信息
 
后退
顶部