已经很久没上ICQ了,今天忽然兴起,挂上ICQ(免费那种)。觉得不过瘾,索性QQ,MSN Messager能开的都开了。刚开完MSN Messager,一则消息从ICQ上传来:
James:Hello,我是James,最近过的好么?很久没看见你了。
(本来是E文的为了大家看着方便,写着也方便就干脆用中文直接写出来了,一直有个感觉,老外问候不太像我们。我们一般是HI过来,然后HI回去,他们一般不,也许关系还没到位吧。一番问候之后,开始入正题了。)James:Richard,你最近忙什么,还在碰UO么?我最近在玩RUNUO,挺不错的,你没有么?
(其实不是玩的意思,应该是研究的意思)我想:UO?晕哦,大概3、4年没碰了。亏你精神那么好~~~,老外给我一个感觉就是执着。做什么事都不轻易就放弃。
我:很长时间没有了。怎么样,UO服务端技术还是那样么?James:不是了,以前UOX占主导地位,现在基本都少了,很多都在玩RUNUO了。
(以前国内用TUS系列后来叫SPHERE比较多,国外不一样,因为国外都是自己弄来研究,不是用来开站,所以多数在研究开源的UOX)我:是吗?那RUNUO怎么样?开源么?性能怎么样?
James:不,不开源。性能不错,超过UOX系列。
(在国外因为UOX开源,所以除了很多私人版本,而且UOX的性能确实低,下一个源码下来看看就知道了,用ROSE反向工程后,看那乱七八糟的类关系、重定义类型就头大)。我:没源码不太好研究啊,什么写的呢?脚本引擎是自己做的么?还是和UOX一样?
(UOX的脚本引擎是用的JavaScript的,TUS和SPHERE的是自主开发的)James:不开源,但是它的脚本很有特色,用的.NET Framework,其实可以说没有用脚本引擎。脚本大多数是C#写的,估计执行程序也是C#开发的。
我:什么意思?没有引擎,那怎么扩展呢?
James:说不清楚,你知道.NET吗?
我想:不至于这么看不起我吧~~~~
我:知道,以前出来的时候玩过一段时间。是一个平台。开发语言很多,它采用的技术是类似JAVA的中间语言,是语言无关性的,对吧?
James:你还知道挺多的啊。
我想:靠~~~分明是洗我嘛。
James:那你应该知到C#本来就是一种解释性的语言吧。
我:其实不全是,可以说类似,但运行时它是经过JIT编译的,不能和解释性语言比,它效率要比那种解释性语言高得多。
James:对,我的意思是类似解释性语言。所以,RUNUO就借助了这个特点,它的脚本也就是C#或VB.NET这种高级语言编写的,所以在运行前就编译过,运行起来效率就以前那些要好了。
我:哦,这样啊,这到蛮有意思的,可以学习学习。
James:是啊,我最近在玩,你不妨也去弄个来玩吧。它的接口设计挺好的,以后说不定还可以参考。
我:嗯,好的。谢谢你告诉我,我去下个试试。那下次再聊,Bye-Bye。
20分钟后,终于下下来了。安装后,看了一下,真的不的了。这种方法就和我当年想的一样。当年是用C++做的服务端,然后里面留出接口。需要扩展的时候,以插件的形式添加,即可以提高效率又可以防止被盗窃源码。以插件方式添加我觉得有两个好处:
1、是编译过的,要反编译到原样是不可能的,因为以前在国内开文艺复兴站的时候,因为服务器安全问题,代码被偷过很多次。
2、既然是编译过的,那就是二进制的,比解释的来得块得多。如果有什么问题,直接替换就可以了,不需要服务器重新加载一次。
RUNUO居然把我当年想过未曾实现的和未曾想过的都实现了,刚开始我还是不太懂,它是如何在运行前把这一系列的.CS文件编译成Assembly的。我以为因为每台运行RUNUO的机器上都必须装.NET的运行环境,那么就一定有CSC这种东西,莫非从外部调用的???嗯,一定是,我心理这么想。(其实后来我才知道我错了,它用了一种比这个高级得多得方式,在后面的章节我们通过它的IL代码也就是反编译出来的中间代码来分析讨论这个问题)
这时jwh51上来了。
我:HI,51大哥。jwh51:好啊,最近好么。
我:还行,很久没看到您啦。最近还在搞破解么?
jwh51:没有了,没有时间。
我:哦,最近我准备搞一个网络游戏,到时候客户端和协议加密部分需要您得帮助啊。
jwh51:没问题,我一直在帮朋友做加密方面得工作。
我:那先谢谢您了。我还有点事先下了。886
jwh51:88
接着我开始考虑刚才的问题,RUNUO怎么实现的利用C#做它的脚本语言的技术。通过反编译,然后又用IL码编译还原,看看中途有没有什么字节损失。还好,完全一模一样,可以开工了…………
本文链接地址: RUNUO服务器分析心得 第零章——序章
本站作品除特殊申明外均为原创,采用知识共享署名-非商业性使用-禁止演绎 3.0 Unported许可协议进行许可。如果需转载请保持文章完整性和标明原文出处,禁止商业用途。
Pingback: Chester
Pingback: Perry
Pingback: Enrique
Pingback: Lewis
Pingback: isaac
Pingback: victor
Pingback: Hubert
Pingback: Brandon
Pingback: William