游戏开发论坛

 找回密码
 立即注册
搜索
查看: 9171|回复: 16

[讨论] 转服务器结构图

[复制链接]

433

主题

4233

帖子

4403

积分

论坛元老

Rank: 8Rank: 8

积分
4403
发表于 2006-2-8 06:04:00 | 显示全部楼层 |阅读模式
1.概述
LoginServer <-----> GameServer
服务端主体分为LoginServer和GameServer, LoginServer做帐户认证, GameServer做游戏主逻辑,
中间也可以加一个CharServer啦, 做人物管理, 新建删除人物之类的, 也可以并到GameServer一
起, LoginServer和CharServer都比较简单, 略过.
通过LoginServer的验证后将分配给Client一个SessionID, 然后与GameServer或CharServer的通信,
都以此SessionID为认证码. Client只有发送正确的SessionID才能与GameServer建立连接.

2.GameServer层次结构
GameServer分为三层, 网络层<--->逻辑处理层<--->数据库层
每层都有一个消息处理队列, 存放待处理的消息. 消息队列可以采用先进先出队列的方式, 也可以
采用堆或者优先队列的方式, 按优先级对待处理消息进行简单的排序, 嘿嘿, 是不是有点类似QoS
的思想.
每层采用线程池技术, 预先建立一定数量的空闲线程,  不够时建立新线程, 过多时则销毁线程,
保证线程池中有指定数量的空闲线程(Min/Max), 主线程不断检查处理队列是否有待处理消息, 若
有则从线程池中分配一空闲线程处理之.
偶在Linux下线程池是用pthread_cond_wait和pthread_cond_signal实现的.

2.1.网络层
本层根据操作系统不同可以有多种实现, 主要功能是与客户端建立TCP连接, 将TCP流分割成一个个封包,
如果有加密就解密, 如果有压缩就解压缩, 加入事务层的处理队列, 同时把处理队列中待发送的消息发
送出去, 如果要加密就加密, 如果要压缩就压缩.
Windows下采用IOCP模型, Unix-like系统下可采用select/poll(epoll)/kqueue
偶在偶的服务端中采用了select方式, Linux单个端口的连接数有限制, 所以偶开了多个线程监听一组端口,
由LoginServer做负载均衡, 从而保证不会出现某个端口连接数过多的情况. 每当有新客户端要登录时,
LoginServer判断每个端口的连接数量, 选最小发送给客户端. 偶想这里也可以做成动态方式,
当每个端口平均连接数超过XXXX时, 就开新线程监听新端口, 并通知LoginServer.

2.2.逻辑处理层
本层是GameServer的核心.
根据操作码(OPcode)把消息分配到每个子模块里面处理. 最简单的方法就是用从0开始的连续的OPcode, 建立
一个与Opcode对应的处理函数的数组, Opcode作为数组的下标, 这样只需要O(1)的时间就可以调用到所需的函数
连Hash都省了, 又简单又高效.
子模块详见第7部分

2.3.数据库层
本层用于数据存储, 本质上就是把内存里的数据存到硬盘上, 要是你够拽的话, 可以不用现有的数据库,
自己写算法存储文本文件, 但为了方便起见, 也为了提高效率, 还是用数据库比较好.
windows下用MSSQL, 或者用MYSQL,
Unix-like系统下可以用的就多了, 能多兼容几种数据库最好
MYSQL的性能优异, 功能上稍差一点, 如果不需要用到存储过程的话, MYSQL还是首选的.
数据库层一般用单线程已经足够, 可以不需要做对象互斥, 编程方面也会简单一点. 但是需要注意的是,
数据库操作方面一定要用Transaction, 可以有效防止复制现象发生, 比如:交易操作一旦发生错误, 则
rollback到交易之前, 不会发生钱已交出, 东西却没拿到的情况.

3.消息格式定义
3.1.网络层<-->逻辑层消息格式(网络封包格式)
3.2.逻辑层<-->数据库层消息格式

4.游戏对象定义(Object)
object
  |-------> item
  |           |----> container(容器类对象,如仓库、背包等)
  |
  |-------> unit
  |           |-----> player
  |           |-----> monster
  |           |-----> npc
  |           |-----> corpse(尸体对象)
  |
  |-------> gameobj
              |-----> dynamicobj(如技能产生的临时对象)
  
5.地图场景管理
6.脚本系统
7.逻辑层模块化设计

149

主题

4781

帖子

5094

积分

版主

Rank: 7Rank: 7Rank: 7

积分
5094
QQ
发表于 2006-2-8 10:30:00 | 显示全部楼层

Re:转服务器结构图

呃……结构“图”?就是短了点,而且通用性不足。

154

主题

4567

帖子

4579

积分

论坛元老

Rank: 8Rank: 8

积分
4579
QQ
发表于 2006-2-8 13:21:00 | 显示全部楼层

Re:转服务器结构图

程序就是高级积木

0

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
QQ
发表于 2006-2-8 14:23:00 | 显示全部楼层

Re:转服务器结构图

呵呵,分析的是wow的服务器结构图。

0

主题

129

帖子

139

积分

注册会员

Rank: 2

积分
139
发表于 2006-2-8 20:20:00 | 显示全部楼层

Re:转服务器结构图

看来MMORPG类的结构相似性颇多。这样的文章,教初学者看了一头雾水,懂行的看则又不够味,呵呵

1

主题

5

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2006-2-8 21:55:00 | 显示全部楼层

Re:转服务器结构图

我是新手 看的是不之所云啊

1

主题

6

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2006-2-9 10:27:00 | 显示全部楼层

Re:转服务器结构图

老猫哪里转来的,给个链接我追过去看看,有没有其他更详细的东东?

0

主题

21

帖子

21

积分

注册会员

Rank: 2

积分
21
发表于 2006-2-9 13:02:00 | 显示全部楼层

Re:转服务器结构图

结构图?图呢?

0

主题

2

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2006-2-10 17:20:00 | 显示全部楼层

Re:转服务器结构图

0

主题

129

帖子

139

积分

注册会员

Rank: 2

积分
139
发表于 2006-2-11 13:14:00 | 显示全部楼层

Re:转服务器结构图

今天有闲,看到这篇文章,随便说几句。整体感觉像是个策划人写的,还好,基本上将能在网上看到的,书里搜到的和自己玩游戏时想到的都揉到一起了。

但,从专业的角度来看,就比较凌乱了,没有起码的正确逻辑,工作流程紊乱,看来此君还需要加大学习力度才能基本满足写这类文章的要求。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2024-5-17 09:57

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表