找回密码
 注册帐号

扫一扫,访问微社区

独自构建unity网络服务器

2015-1-7 16:06| 发布者: 杨炎| 查看: 2276| 评论: 0|原作者: 蛮牛|来自: unity3d脚本manual

摘要: 独自构建 unity 网络服务器所有单独的网络服务器的源代码都可以从unity 网站上下载。包括连接测试器、服务商、主服务器和代理服务器。所有源代码包都包含 raknet 3.732 网络库,该库能处理基本的网络函数并可提供网 ...

独自构建 unity 网络服务器

所有单独的网络服务器的源代码都可以从unity 网站上下载。包括连接测试器、服务商、主服务器和代理服务器。

所有源代码包都包含 raknet 3.732 网络库,该库能处理基本的网络函数并可提供网络服务器使用的插件

源代码包包含三种不同类型的工程文件,可直接用于编译:

用于 mac os x 的 xcode 3.0 工程

用于 linux 和 mac os x 的生成文件 (makefile)

visual studio 2008 解决方案

xcode 和 visual studio 工程可被打开、编译和构建。要使用生成文件 (makefile) 进行构建,只需运行“make”。它应与 linux 和 mac os x 上的标准编译设置配合使用,如果您有gcc,它就会运行。在 linux 上您可能需要安装 ncurses 库。

结构

主服务器

主服务器 (master server) 使用内部数据库结构来追踪主机信息。

主机发送带有 rum_update_or_add_row 消息标识符并嵌入了所有主机信息的消息。此过程由 lightweightdatabaseserver.cpp 文件中的onreceive()函数处理。这里是所有消息最初出现的地方,因此也是您开始追踪消息处理过程的好位置。数据库结构中为每个游戏类型创建了一个表,在使用masterserver.registerhost函数时会对该表进行设置。所有游戏类型都被聚集在一个表中,如果该表不存在,则会在createdefaulttable()函数中动态地创建该表。

主机信息数据由主服务器修改。正在注册的游戏 ip 和端口在被主服务器发现时会被加入到主机数据中。这样,在主机有私有地址(nat 地址)的情况下我们一定能检测到正确的外部 ip 和端口。主机数据中游戏服务器发送的 ip 和端口是私有地址和端口,将被保存以供后续使用。如果主服务器检测到客户端正在请求游戏服务器的主机数据,并且游戏服务器有相同的 ip 地址,那么它将用服务器的私有地址来代替外部地址。这用于处理客户端和服务器在相同的本地网络上并使用带 nat 地址的相同路由器时的情况。因此它们会有相同的外部地址但无法通过它互相连接,它们需要使用私有地址,这些地址在该情况下将会有用。

客户端发送带有 id_database_query_request 消息标识符以及其正在寻找的游戏类型的消息。从数据库结构中取得表或主机列表并将其发送到客户端。如果没有找到,则会发送空的主机列表。

发送给主服务器的所有消息都必须包含在checkversion()函数中被检查的版本信息。此时 unity 的每个版本都会在内部设置一个新的主服务器版本并在此进行检查。因此如果主服务器通信程序会在任何点发生更改,它将会在此处检测更旧的版本,并可能参考主服务器的其他版本(如果必要的话),或者修改该消息的处理以说明该差别。

服务商

服务商在不修改的前提下直接使用 raknet 的 nat 穿透 (punchthrough) 插件。这在本质上只是在加载了 nat 穿透 (punchthrough) 插件的端口上的同级监听 (peer listening)。当有 nat 地址的服务器和客户端都连接到这一级时,它们将能执行 nat 穿透 (punchthrough) 来相互连接。当network.initializeserver使用 nat 时,会自动为您建立连接。

上一篇:主服务器下一篇:最小化网络带宽

相关阅读

文章点评
相关文章
蛮牛教育10.1大促销!全站6折扣!