浩方战网平台分析

虽然早就听说过浩方是如何工作起来的。但要真正说到其细节,还是可以深入地探究一下。

很多都应该知道,浩方本质上是将整个Internet变成若干个大的局域网的方式,让所有游戏在这个“局域网”上运行。那么,浩方是如何架构这样的系统的呢?

下面的所有的分析,使用大家熟知的星际争霸作为例子。首先先看看星际在局域网上运行的方案。我们这里不分析UDP协议的。有兴趣的可以深入探讨。

浩方战网平台分析

两个不同的星际实例,依赖于IPX协议在局域网里进行连接。另外,众所周知,星际争霸是基于DirectX开发的,因此,暂且认为,其是基于DirectPlay来进行IPX开发的。

在上面的这种方案下,要将其扩展到Internet,关键就在于替换IPX协议。为什么这么说呢?原因有两个:

  1. 浩方启动星际之后,就算系统没有安装IPX,也可以使用IPX连接。
  2. 浩方并没有静态修改星际的运行代码。而且为了做到各种游戏的通用性,只可能是在动态替换某个协议层。

第2点可以通过试验得到证实。如果你使用Dll Explorer对星际程序进行跟踪,会发现,如果用浩方启动星际,那么会比直接启动星际多出一个dll。这个dll正是浩方自己自带的SCSocket.dll。

我们基本可以根据这个假设,画出浩方的架构图:

浩方战网平台分析

当你使用Depends打开SCSocket.dll之后,你会发现一些细节。

浩方战网平台分析

  1. FNS_SetDPlaySvrHandle和FNS_GetDPlaySvrHandle应该是和DirectPlay进行交互的代码。虽然说浩方实现的是虚拟IPX协议层,但这种实现其实有很多种方式。一是直接做成一个驱动,也可以做成HOOK,直接对DirectPlay的调用进行反馈。个人更倾向于后者。
  2. 不管是为了娱乐性也好,还是为了性能也好,浩方平台必然是按照房间ROOM的概念来划分局域网的。相关函数应该是FNS_SetRoomInfo。
  3. 浩方是需要服务器的。可以参考看看FNS_AddHost,FNS_EmptyHost,FNS_SetLocalHostInfo,FNS_RemoveHost等等。
  4. 不需要看都应该知道,浩方是使用TCP/IP连接所有游戏的。另外,显然浩方应该处理TCP/IP上的代理问题。FNS_SetProxy应该就是基于这个来完成的。
  5. 我们还能发现很多有趣的接口,比如FNS_SetWar3GameStartFlag,从名字上看,很可能是War3相关的接口,说明浩方的平台并不能完全做到独立性,在一些情况下,还是需要特殊处理的。

整个架构中,我认为最有创意的在于将IPX转换成TCP/IP。很多人说这是中国环境下发展出来的特有产物,我也比较同意。这并不是我所关心的。不管怎么样,这个架构确实非常棒。

架构这东西,其层面就是处于那个说出来,大家都能明白,但是做出来的,只有那么几个。不过从上面的分析看来,浩方确实已经修改了原有星际的运行规则,并且其运行方式必须是浩方启动星际,很有Loader破解的嫌疑。也正因为此,浩方目前正和神州奥美打着关司呢。

你可能感兴趣的:(游戏,工作)