摘要: 我们知道毫无节制地申请内存和释放内存,必定会导致系统内存碎片剧烈地增加,最直接导致的后果是系统内存资源枯竭,游戏状态越来越慢,各种反应不及时,各种未知错误层出不穷! 直到现在,我发现游戏变慢,很多人都归结为客户端的问题,其实啊,更多的问题出在服务端上面。当然还有一部分原因在于逻辑的不合理。客户端和服 阅读全文
posted @ 2017-12-05 07:35 一笑如风 阅读(910) 评论(0) 推荐(0) 编辑
摘要: 这段时间都是在重构系统数据模块。懂的朋友自然知道,什么才是系统最至关重要的部分!不懂的朋友只会关心程序的功能有多么的牛逼!去,这都是垃圾,不提! 数据结构就是一个一个系统模块,如果整个系统都是由各个模块链接构成,那么这就形成一个更加稳定的大型游戏系统。 如果某一个环节出了问题,就直接查该环节,而不影 阅读全文
posted @ 2017-11-30 23:45 一笑如风 阅读(438) 评论(0) 推荐(1) 编辑
摘要: 大量大量的全局变量,大量大量的各种麻烦............................ 很奇怪为什么没有人感到这些麻烦,当然了,Delphi 2007不会让人感觉到这些麻烦,甚至完全可以写出各种奇葩的代码,而不担心编译器报错,当然了,各种潜伏的麻烦还是会大量大量的存在。 真的,有一些还是系统 阅读全文
posted @ 2017-11-07 01:41 一笑如风 阅读(399) 评论(0) 推荐(0) 编辑
摘要: 算是整明白HGE底层绘图机制,里面包含了两种后备缓存的方式,一种是常规的那种后备缓冲,另一种,里面采用了渲染到目标的方式。 渲染到目标纹理,除了创建一张大的纹理之外,另外还需要搭配一个缓存区。这是流程中的设置,没有什么好说的。 实际上,这样一来可以把纹理按照默认方式,创建到显示内存里面,没有这种设置 阅读全文
posted @ 2017-11-05 00:36 一笑如风 阅读(795) 评论(0) 推荐(0) 编辑
摘要: 代码升级确实很麻烦,不是一般的麻烦。 因为需要整理出一套配合我自己写的D3D绘图引擎,所以我选择了以前的IGE作为项目的开端。原因很简单。因为现在的那些源代码是无法完成这个工作的。 而且如果有了一套完善的基础版本,那么以后无论想改成啥都容易得多。 说说绘图引擎,目前HGE算是主流吧,其实这是大家没有 阅读全文
posted @ 2017-10-31 14:49 一笑如风 阅读(1288) 评论(1) 推荐(1) 编辑
摘要: 在这里给一些朋友致歉: 因为各种原因,很久没有关注博客了,所以大家给我发的信息都没有及时回复,真是不好意思! 经历了各种蹉跎,想不到今天终于回归。 能够说的东西不多,废话一大堆,就当是废话吧。 这几年来,相信市场的变化还是比较大的,至少目前来说,各种引擎层出不穷,也参差不齐。 我看了几份开源的代码, 阅读全文
posted @ 2017-10-31 13:14 一笑如风 阅读(355) 评论(0) 推荐(0) 编辑
摘要: 一开始学习完成端口编程的时候,我看的资料是小猪的关于完成端口的教程和源代码。 好在,我还有那么一点点C++的底子,不是很好,勉强看得懂吧。 其实看得懂不是IOCP完成端口的具体原理,而是这些C++代码结构逻辑而已。 很惨,对吧。 后来我采用Delphi的代码结构来做,说真的,当时一样是一塌糊涂,哈哈。 很多人说,IOCP完成端口被神化了,其实这个很正常啊,不懂的时候,看啥都是神秘的。 其实小猪的这个代码很有用,他的执行测试Demo是我见到的最快的程序。 Delphi编码的程序,很多人的程序我测试过了,反应确实没有他快。客户端发送几百条数据,一边发,服务端一边不断地接收刷新数据... 阅读全文
posted @ 2012-08-30 00:10 一笑如风 阅读(3720) 评论(0) 推荐(0) 编辑
摘要: 因为需要参考各种资料,所以还是需要一些时间才能够做好的。 而且在开发中,还会面对一些不得不仔细去解决的问题。 我打算尽量从Win32API的基础上面进行开发,能够不使用Delphi封装的类就不用,任何类都是无法避免多余的开销,而我们往往只使用一两个功能就付出那么大的代价,是否值得???? 当然,别谈跨平台了,在中国,还是老老实实在Windows系统上面搞开发吧,而且服务器编程跟客户端没有直接的关系,客户端,你仍然可以采用任何语言进行开发,或者只使用JSocket的客户端控件就行。当然,如果时间允许,我们也可以自己封装一个,其实都差不多的,没有见得好到那里去。 客户端跟服务端不同,不... 阅读全文
posted @ 2012-08-27 16:51 一笑如风 阅读(1958) 评论(2) 推荐(0) 编辑
摘要: 本来打算先完成一些汇编上的事情,再等以后时间充足的时候,再搞的。 但是我看着那些源代码,心理确实不是滋味。 因为不管你是现在做或者以后做,都必须面对这些要命的问题。 我不知道大家看着下面这个结构,心理是什么感想,我只知道要改的话,比去完成一个IOCP完成端口控件所需要的时间还要多得多。 1 TGateInfo = record 2 Socket: TCustomWinSocket;3 sIPaddr: string; 4 sReceiveMsg: string;5 UserList: TList;6 dwKeepAliveTick: Lo... 阅读全文
posted @ 2012-08-26 22:17 一笑如风 阅读(2732) 评论(1) 推荐(0) 编辑
摘要: 上篇,我们提到了内存创建和释放带给长时间运行的服务器性能的损害问题。 当然还可能增加了CPU的相当的开销。 那么如何解决这个问题呢。 在这里只做一些讨论,具体实现,是你自己的事情。 到目前为止,我们能够做的都是管理一个内存池。 一开始,我们先分配好一批内存,把这批内存标注为空闲。 在客户端连接入来的时候,从空闲链表里面取第一个结构指针,填充内存。 Delete(0);删除空闲链表索引,是删除,不是释放,这个要记住。 然后使用一个正在使用链表来管理已经被调用的内存,使用ADD操作。 那么跟客户端断开连接后,将该释放的或者需要置Nil的对象处理之后。 从正在使用的链表删除该... 阅读全文
posted @ 2012-08-25 15:19 一笑如风 阅读(705) 评论(0) 推荐(0) 编辑