自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

cometeor的专栏

语言的意义即用法

  • 博客(24)
  • 资源 (1)

原创 用C#中的yield实现Coroutine框架

最近看到Unity3D中的Coroutine,思路相当值得借鉴。在服务器(尤其是基于事件驱动框架的服务器)编程中,异步操作是难以避免的。传统的异步操作会因为大量的回调操作造成逻辑的支离破碎,再加上状态维护和各种异常处理,很容易就将代码的复杂度提升到外星人才能理解的程度。比如,有这样一个宠物AI:等待主人下达移动命令;移动到目标地点;等待3秒钟;喊话;常用的编程模式(非轮询):class Pet{ public event MoveCompleted; public Dispatche

2011-04-13 10:23:00 13296 5

原创 Protobuf生态圈(上)简介和数据库粘合层

关于Protobufprotobuf是google的一个开源序列化框架,基于二进制数据交换格式,兼顾了效率和灵活性。详见http://code.google.com/p/protobuf/。本文假定读者对protobuf已经有了初步接触,故略过一些基本和细节的描述,着重于介绍protobuf在笔者项目中的应用思路。因项目主要编程语言是c++,所以本文的示例着眼于如何在c++中借助protobuf简化一些通用模块的处理。对于其它语言(java,python等),如果语言本身没有更好用的特性或者更方便的库的话,

2011-01-31 10:27:00 10575 6

原创 整合OGRE和bullet的地形

<br />把OGRE和bullet的地形整合在一起比预想中的麻烦。<br />主要是两个问题:通过HeightField生成三角形网格的方式不一样,以及HeightFiled寻址方式不同(OGRE转换成float数组后,以坐下角为(0,0)点,而bullet的btHeightfieldTerrainShape类是左上角)。好在需要改动的地方在btHeightfieldTerrainShape都是虚函数,所以可以通过继承来解决(看来作者已经预料到这些问题,不过注释很少,很多东西需要看源码才能弄清楚)。以下是

2010-06-14 01:05:00 4159 2

原创 整合OGRE的地形和PSSM+LiSPSM阴影算法

<br />OGRE版本1.7.1的Sample里包含了地形的示例,且用到了PSSM+LiSPSM。<br />今天尝试把Character的Sinbad模型摆到地形上,不过模型的材质本身不支持PSSM。<br />看了下地形示例的实现,发现它在给Shader传PSSM分界点数据时,用了把模板材质clone一份,再设置diffusemap和pssm分界点的方法,相当让人无语....<br /> MaterialPtr ret = MaterialManager::getSingleton().getByN

2010-06-09 01:08:00 6745 1

原创 关于iostreams的效率

    简单测试发现iostreams::stream的效率比我想象中要低...看了一下源码,发现写入流的数据并不是直接写入到device中,而是在内部缓存起来,缓冲区满或者调用flush时才把数据复制到device里,造成不必要的内存拷贝。缓冲的机制对于比较慢的device(如标准io、文件流等)是常用的策略,不过对于我的应用来说(相当于把流输出到vector中)就是不必要的步骤了。仔细阅读手册

2010-05-21 17:41:00 2883

原创 protobuf消息的自动派发

google protobuf消息序列化后的数据是没有类型信息的。而一般网络应用要求序列化后发送到对端,还原出类型,反序列化,再派发给相应的消息处理函数。以下代码简单实现了自动派发的机制。新增protobuf消息只要增加一行声明的代码和相应的处理函数就可以了。http://eddyserver.googlecode.com/svn/trunk/common/tests/protoserve

2010-05-20 17:19:00 4255 1

原创 整合protobuf、boost::iostreams和NetMessage类

示例代码见http://eddyserver.googlecode.com/svn/trunk/common/tests/messagetest.cc NetMessage类提供了兼容stl的接口,通过boost::iostreams示例的ContainerDevice可以方便的与boost::iostreams::stream结合起来。而boost::iostreams::str

2010-05-20 16:56:00 4391

原创 asio socket::close时异步操作的处理

asio中socket通常的用法如class Session { public: void HandleRead(const boost::system::error_code& error, size_t bytes_transferred) { if (error) { delete this;

2010-05-18 19:09:00 7576 1

原创 boost::bind效率上的注意事项

今天粗略测试了一下boost::bind的性能,得出以下几个猜测(仅限于gcc,windows下未测试):boost::function内部预留了(sizeof(成员函数指针) + sizeof(指针))的空间,所以如果bind的参数占用空间小,则会使用placement new的方式,不会涉及动态内存分配。典型的情况如boost::bind(成员函数指针, 对象指针),或者全局函数指针加少量

2010-05-15 13:39:00 5461 1

原创 代码已上传至googlecode

本blog的相关代码svn checkout http://eddyserver.googlecode.com/svn/trunk/ eddyserver-read-only未完善,烂是烂了点...

2010-05-14 22:13:00 4300 4

原创 boost::asio 1.4.3的linux实现总算采用epoll的et模式了

Asio:Improved performance.Reduced compile times.Reduced the size of generated code.Extended the guarantee that background threads dont call user code to all asynchronous operations (#3923).

2010-05-14 22:08:00 5970

原创 高效的网络消息类实现

感谢gogoplayer提供的思路。 事情的经过是这样的:几天前gogoplayer跟我提到想用引用计数来解决消息广播时拷贝多份的问题,顺带提到boost::shared_ptr的引用计数是线程安全的。这一点跟我的记忆有出入,于是查boost的手册确认了一下,发现从1.33.0开始shared_ptr就用了lock-free来实现线程安全,相当高效。 于是就想把原本的NetMess

2010-05-14 21:40:00 3919

转载 TCMalloc

今天看protobuf的文档提到了TCMalloc,发现其小对象的内存分配策略跟我在项目中的实现思路差不多...不过它的大对象另有一套策略,而且远比我写的通用。要是早知道这玩意就不用重复发明轮子了。相关文档:http://goog-perftools.sourceforge.net/doc/tcmalloc.html中文翻译:http://shiningray.cn/tcmalloc-

2009-12-15 15:46:00 3570 1

原创 快速构建MMO服务器框架(七)高并发TCP网络框架

忙活了一个多星期,差不多把基于TCP的高并发连接网络架构测试稳定了。目的:利用多线程把网络连接及数据包压缩/解压、加密/解密等等耗时的操作分流(asio对这些没有原生的支持),顺带提供线程池框架。只对游戏逻辑层暴露出单线程的外观,隔离底层多线程的复杂度。结构如下图(未遵循什么标准,将就着看吧): TCPSessionHandler:暴露给逻辑层的类,内部负责通过TCPIOT

2009-12-14 18:09:00 11600 4

转载 菊花驱动开发

在http://www.scottberkun.com看到的另一篇,蛮有意思。(话说这个网站用的图标是其作者名的简写S*B...)   Asshole driven developmentThe software industry might be the world’s greatest breeding ground for new systems of managemen

2009-12-14 11:36:00 3222 1

原创 无为

今天在某qq群里看到有人群发了这样一段话:  A healthy, confident, well-adjusted manager knows their job is to do three things:  1. Hire thoroughbreds, point them at the finish line, and get out of their way unle

2009-12-14 10:58:00 3012 1

原创 快速构建MMO服务器框架(六)asio稍微复杂一些的例子:高并发echo

 以下是来自boost example的异步echo server://// async_tcp_echo_server.cpp// ~~~~~~~~~~~~~~~~~~~~~~~~~//// Copyright (c) 2003-2008 Christopher M. Kohlhoff (chris at kohlhoff dot com)//// Distribut

2009-11-29 19:55:00 10295 8

原创 快速构建MMO服务器框架(五)timer的那些事儿

     定时器管理在MMO服务器这类需要处理大量事务的系统中,往往是优化的热点。    最简单的轮询式定时器的实现如(psudo code):class Player{ public: void loop() { if (timer.check()) { //do something; } //other timer ...

2009-11-28 22:26:00 6022

原创 快速构建MMO服务器框架(四)关于boost.asio的补充

 今天看了看asio的源码,上一篇的一些疑惑也清楚了。遇到问题果然read the f**king code才是王道。 关于异步socket:io_service在调用async_send、async_receive这类接口的时候,会把socket设置成非阻塞,用户不需要手动设置(相当体贴)。不过类似no_delay这样策略性的选项还是需要操心的(不然谁知道你想干嘛)。 关于lin

2009-11-28 16:24:00 6946 1

原创 不小心卸载了python2.6,后果很严重....

 今天由于boost编译要依赖python的开发包,安装python3.1之后觉得可以把2.6卸载了于是 sudo apt-get remove python2.6 回车 看也不看按y.....一大堆依赖python的软件也跟着卸载了....后果:重装ubuntu

2009-11-28 15:04:00 7095 4

转载 备份一下我的.vimrc

 网上流行的一个版本"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 一般设定"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 设定默认解码set pastetoggle=set fenc=u

2009-11-28 15:01:00 2327

原创 快速构建MMO服务器框架(三)boost.asio初步

 c10k问题已经成为历史。(详细)  Boost.Asio is a cross-platform C++ library for network and low-level I/Oprogramming that provides developers with a consistent asynchronous model usinga modern C++ approa

2009-11-28 00:53:00 8304

原创 快速构建MMO服务器框架(二)网络:选用boost库

    好像地球上还没有不支持网络的网游服务器吧。      以下几篇文章将尝试用boost库来实现服务器的网络相关功能。    备选的库还有ACE和libevent。    ACE太胖,个人比较反感标准容器都自己实现的做法。    libevent太瘦,其它功能不够丰富。    boost不胖不瘦,兼容和增强stl,一堆丰富的类库,asio直接把高性能的网络并发模型封装好了,

2009-11-27 18:36:00 6137 1

原创 快速构建MMO服务器框架(一)前面的唧歪

   聪明的脑袋是宝贵的有限的资源。当世界还充满非常多有待解决的有趣的新问题时,它们不应该被浪费在重新发明轮子这类事情上。                            —— Eric S. Raymond     大多数程序员都自认为自己比通常的人类要聪明。在网游开发圈子游荡了两年,所见的所谓资深程序员无一不爱干重复发明轮子的事情(部分原因也许跟他们所习惯的时代有关,尚无

2009-11-27 17:17:00 5595 2

Unity3D插件NGUI 2.7.0最新版

Unity3D使用最普遍的GUI插件NGUI,高效易用

2013-09-14

空空如也

空空如也
提示
确定要删除当前文章?
取消 删除