免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 21569 | 回复: 52
打印 上一主题 下一主题

网络游戏中的连接服务器 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-09-09 09:55 |只看该作者 |倒序浏览
最近在看一些网络游戏的源代码,看到他们都喜欢用一个专门的连接服务器来管理大量的连接,这个服务器把大量(一般都是10左右)客户端的数据转发到内部的其它服务器中去。这些实现有些是用windows的完成端口,有的用freebsd的kqueue,有的用linux的epoll。但我有个疑问,这台服务就相当于一台路由器,负责包的转发,但它工作在4层以上,与真正的路由器转发包的效率相差甚远,这会造成延迟,再则,比如一个进程(单线程)用epoll监管10000个连接,在最坏时可能这10000个连接都有数据可读,那么串行读取,那么最后一个连接的延迟岂不是更严重?因为程序要先read() 9999次之后才来read最后一个,然后转发。

在这些实现中,我感觉windows的完成端口要比其它模型要好些

我在这个领域一点经验都没有,希望向大家学习学习

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2009-09-09 10:00 |只看该作者
你是不是没理清楚头绪啊,
我做过的网游的连接服务器只是负责初始连接,
一旦进入某个具体的地图的时候,客户端会和具体的地图服务器建立连接,初始的那个连接就断开了。

论坛徽章:
0
3 [报告]
发表于 2009-09-09 10:17 |只看该作者
原帖由 flw 于 2009-9-9 10:00 发表
你是不是没理清楚头绪啊,
我做过的网游的连接服务器只是负责初始连接,
一旦进入某个具体的地图的时候,客户端会和具体的地图服务器建立连接,初始的那个连接就断开了。


哦,可能你那个实现不太一样吧。

我看得这个代码大概是这样的哈,首先用户连接登陆服务器获取sessionid和 game gate的(ip:port),然后客户端去连接这个game gate,之后只要不退出游戏,不管怎么换地图都不会断开这个连接,game gate之后还有个地图管理服务器,所有的地图服务器都连接到这个地图管理服务器,所有客户端发来的跟地图相关的包都会由game gate转发给地图管理服务器,然后地图管理服务器根据角色所在的地图再次转发给对应的地图服务器。

我感觉这样大量的转发会造成很多延迟阿,感觉你那个实现要好些。

ps:如果你愿意不怕泄密,是否可以向我们讲解一下mmorpg业界通用的服务器端的架构阿,谢谢!

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
4 [报告]
发表于 2009-09-09 10:44 |只看该作者
你刚才阐述的这种架构没法分布式啊。只能在同一个机房里搞,
那南北互通的问题就很难解决了哦。

我说的那种架构就稍微好一些,可以把用户分配到合理的地图服务器上去。
而且不限制地图服务器的物理位置。

论坛徽章:
0
5 [报告]
发表于 2009-09-09 12:50 |只看该作者
原帖由 bobozhang 于 2009-9-9 09:55 发表
最近在看一些网络游戏的源代码,看到他们都喜欢用一个专门的连接服务器来管理大量的连接,这个服务器把大量(一般都是10左右)客户端的数据转发到内部的其它服务器中去。这些实现有些是用windows的完成端口,有的 ...



我给你解释一下把, 一般如果是基于tcp应用的网络游戏, 这种连接服务器其实可以看作是客户端代理, 一个clientproxy可以代理n个client, 看性能而定。

一般这种clientproxy是多个, 由网络服务的中心服务来负责分配负载均衡。 每个clientproxy跟内部地图或者gameserver之间建立固有的连接。

对于内部服务来说, 他们看到的只有clientproxy, clientproxy 有一个重要作用就是做数据包的安全check,  保证进入游戏服务群组内的消息, 都是正确的。
clientproxy 还可以分担把逻辑server的广播压力。

至于说时延问题, 其实大部分mmorpg类型的游戏, 对时间要求都不是很高, 除非是fps 或者竟速或者强pk类型的, 可能要特殊处理一下。 也就是同时使用tcp and udp两种协议。主要的时延产生在client - clientproxy之间, 而不是内部server之间, (可以用网络通信, 也可以用进程通信, 甚至可以单进程, 多thread)。

[ 本帖最后由 xhl 于 2009-9-9 14:14 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2009-09-09 13:42 |只看该作者
LZ看的源代码是很早很早以前的那套传奇的代码吧~~

论坛徽章:
0
7 [报告]
发表于 2009-09-09 13:50 |只看该作者
... 老吗?

我们现在也是这么做的?

客户端直接和map 服务器连接? 好烂的设计。同时登陆2个服务器, 安全性, 帐号余额 都将成为问题。

这样的服务器 可以说叫gateway, 好处很多, 安全 稳定。 当然 gateway 本身的压力会很大。

论坛徽章:
0
8 [报告]
发表于 2009-09-09 14:32 |只看该作者
to anders0913:  不是传奇那套代码哈,那个代码是dephi的,看不懂,至于c++那套,听人说本身写得比较烂,没看过

to benjiam:压力大是否可以增加gate的个数来解决?我主要关心延迟的问题哈,这样设计的话真的会如 xhl 所言的那样不会造成过多的延迟吗?

论坛徽章:
0
9 [报告]
发表于 2009-09-09 14:34 |只看该作者
to flw:  南北问题应该不算大问题哈,在双线机房里面电信布置一个gate,网通布置一个gate

论坛徽章:
0
10 [报告]
发表于 2009-09-09 15:00 |只看该作者
最近也要看网络游戏服务器相关的东西,看点啥好呢?各位前辈给介绍介绍呗。。就是会涉及到的相关技术。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP