自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

siddontang的专栏

my thought for program。

  • 博客(73)
  • 收藏
  • 关注

原创 学习tornado:介绍

前言在python里面,有许多web framework。对于我来说,因为很长一段时间都在使用tornado,所以有了一些心得体会。虽然现在我的工作重点已经转向go了,但是我觉得还是有必要记录一下tornado的相关东西,毕竟我的高性能网络库 libtnet 就是参考tornado来设计的。在这里,要说明一下,tornado采用的是2.4版本。架构tornado是一个典

2013-12-30 22:44:48 2368

原创 高性能C++网络库libtnet实现:http

HTTPlibtnet提供了简单的http支持,使用也很简单。一个简单的http server:void onHandler(const HttpConnectionPtr_t& conn, const HttpRequest& request){ HttpResponse resp; resp.statusCode = 200; resp.setCo

2013-12-29 16:24:23 6044

原创 my golib:db query Result

go提供了一套统一操作database的sql接口,任何第三方都可以通过实现相应的driver来访问感兴趣的数据库。譬如我们项目中使用的Go-MySQL-Driver。go提供了一套很好的机制来处理数据库的查询操作,譬如官方的例子:age := 27rows, err := db.Query("SELECT name FROM users WHERE age=?", age)if

2013-12-16 22:36:49 2843

原创 高性能C++网络库libtnet实现:Connection

Connectionlibtnet只支持IPv4 TCP Connection,之所以这么做都是为了使得实现尽可能的简单。我们主要在Connection类中封装了对tcp连接的操作。Connection继承自std::enable_shared_from_this,也就意味着外部我们会操作其shared_ptr,libtnet几乎所有的对象都采用智能指针的方式来进行内存管理。

2013-12-10 22:04:53 2157

原创 高性能C++网络库libtnet实现:IOLoop

libtnet采用的是prefork + event loop的架构方式,在最新的linux系统中,提供了timerfd,eventfd,signalfd,加上原先的socket,大部分功能都可以抽象成io事件来处理了。而在libtnet中,这一切的基础就是IOLoop。

2013-12-05 23:10:57 4910

原创 发布一个参考tornado的高性能c++网络库:libtnet

libtnet是一个用c++编写的高性能网络库,它在设计上面主要参考tornado,为服务端网络编程提供简洁而高效的接口,非常易于使用。

2013-12-03 20:43:38 4449

原创 证书,CSP与Openssl

证书,CSP与Openssl起因最近在研究更安全的交互体系,自然想到的就是提供证书的交互方式。给用户分配一对公私钥,然后将私钥交给用户保管,用户在登录或者一些关键操作的时候通过私钥签名,从而保证其安全性。鉴于团队的童鞋都没有开发usb key相关的经验,所以最开始的版本只考虑通过软证书实现。为了保证安全性,我们将用户的证书信息放置在windows系统的证书存储区里面,这样既减少

2013-06-20 20:28:11 2579

原创 nginx虚拟主机解决企业内外网访问

nginx虚拟主机解决企业内外网访问在企业里面部署服务,需要面临的一个问题就是不同企业复杂的网络环境。通常来说,私有云只需要在企业内部使用,但是也有很多企业需要通过外网能访问。同时,对于不同网络的访问请求,系统也需要进行不同的处理。譬如内网用户请求下载直接可以rewrite到对应的内网下载机上,但外网用户请求下载则可能需要通过代理进行。因为我们的系统使用nginx作为网络总的入口,

2013-05-29 21:00:38 10157 3

原创 nginx性能优化

nginx性能优化最近在测试服务器压力的时候,发现使用tornado的服务benchmark上不去,顶多1500左右,nginx即使开了8个进程,在响应请求的时候有一个work进程的cpu超高,达到100%的情况。对于cpu超高的情况,当初我们都认为是2.6.18网卡中断只能在一个cpu上处理,导致cpu高,这虽然是一个原因,但是短期内升级整个系统是一个不太可能的事情。鉴于

2013-05-26 20:47:42 2965

原创 缩略图架构实现

缩略图架构实现笔者最近将缩略图功能引入了私有云系统中,这里简单记录一下。架构整体架构如下:可以看到,笔者采用了通用的分层架构设计模式。file storage存放着原始的图片数据。image server用于图片的处理,同时进行图片的cache。nginx作为统一的入口,同时也作为cache。当用户请求一张图片的缩略图的时候,如果该图片不存在于n

2013-05-22 08:04:56 2960

原创 swig的学习以及国密的python封装

swig的学习以及国密的python封装起因最近在研究国密算法,而我们主要是使用python来进行开发,所以就需要构建一个国密的python模块。国密算法网上已经有很好的实现,笔者使用的是一个参考Xyssl实现的那个版本。因为这些版本都是c的,所以很容易将其扩展到python里面,但是为了跟python自身的crypto的行为一致,需要将国密生成相应的class。譬如,pyth

2013-05-20 21:53:18 5435

原创 关于web服务器架构的思考

关于web服务器架构的思考笔者最近一年都在从事企业私有云存储的开发,主导并推动了服务器架构的重构。在架构演化的过程中,有了很多的心得体会,这里记录一下,算是对自己架构成长的一个总结。原则对于笔者来说,设计一个web服务器架构方案,最先考虑的就是简单以及可扩展性。而这两个也是笔者设计架构的首要原则。简单对于一个企业级web产品来说,它其实是由非常多的基础服务来组合起来

2013-05-05 21:45:12 1981

原创 一个简单的注册c函数到lua的包装器

前段时间写了一个注册c函数到python的简单的包装器,今天依葫芦画瓢,写了一个注册c到lua的包装器。虽然注册c函数到lua我在以前也写过一个包装器,而且使用起来更简单(参照网址:http://blog.csdn.net/siddontang/archive/2008/04/20/2309381.aspx)但是这个方法时参考luaplus实现的,并不能算是我自己想到的,再加上这个

2009-06-06 16:34:00 1967

原创 一个简单的注册c函数到python的包装器

这几天继续研究了一下python,顺便看了一下如何注册c的函数到python,这方面网上的东西已经很多了,就不详细说明了。反正大概就是把要注册的函数写成PyObject* Fun(PyObject* self, PyObject* args)这样的形式,然后通过PyArg_ParseTuple从python中取出参数传递给c函数,然后通过Py_BuildValue把c函数的返回值返

2009-06-04 22:31:00 1965

原创 static_cast NULL的问题

今天头突然把我写的一段代码发给我,问我有什么问题,如下 假设B继承于Avoid fun(A* pA){    B* pB = static_cast(pA);        if(!pB)        return;    //do other} 当时我没有明白有什么问题,可是他说

2009-05-23 22:22:00 2710 1

原创 写在进入游戏行业一周年

记得去年的今天,离开了via,风风火火的投入了我们伟大的网络鸦片事业中来,已经过了一年了。时间咋过的这么快呢?快的让人有点赶不上步伐了。想想这一年的生活,几乎天天都是在加班中度过的,连周末都没有休息。所以如果大家不是对制作游戏真的感兴趣,还是别往这个坑里面跳,要做出一款好游戏,不掉曾皮那是不可能的。不过现在我们的游戏还没有出来,具体好不好只能由玩家来决定,只是现在我已经掉曾皮了。

2009-05-19 20:27:00 2668 4

原创 实现了一个简单的timer

对于游戏编程来说,timer是绝对不陌生的,不过以前一直使用一些库提供的timer,像sdl的timer,windows api提供的timer,这段时间突然觉得像这种东西还是在自己的游戏引擎里面实现一个,作为基本类库使用。首先参考了一下linux的timer机制,详细见 http://www.linuxforum.net/forum/showthreaded.php?Cat=&Board=d

2009-04-01 22:59:00 1320

原创 可恶的typedef class和friend

 今天写了一段代码,大概是这样的class A{}; class B{typedef  A AA;}; class C{typedef B::AA AA;friend AA;}; 当我在vc下面调试通过并高兴的上传到服务器上面用gcc编译的时候,发现无论怎样都死活编译不过去,就是那句friend AA,然后我換了很多种写法,如friend

2009-03-04 23:42:00 1687

原创 骑车去上班(1)--动机

我现在住的地方叫回龙观,至于为什么叫这个名字,相传是明朝皇帝去拜谒皇陵时候,回銮途中多驻跸于此。不过虽然是龙,但我丝毫没感觉“有龙则灵”的样子。可能是我周围全是居民区,连一点古时的遗迹都没有的缘故吧。不过今天不是讨论回龙观的问题,只是想说明我现在住在这里,离我上班的地方大概有15公里的路程。至于为什么不搬到离公司近一点的地方,有很多原因的。像公司马上就要搬家,我想等到公司搬家之后再搬。再就

2008-07-28 22:32:00 1163

转载 类型转换的一个问题

    碰见了一道题目        #defineTOTAL_ELEMENTS (sizeof(array)/ sizeof(array[0]))    int array[]= {23,34,12,17,204,99,16};     intmain()      {               intd;                for(d=-1;d<= (

2008-06-14 14:35:00 974

原创 把C++类成员函数集成到lua

       有时我们会把C++类导入到lua,这样方便在lua里面对C++类进行操作,这在游戏编程里面经常使用,本文只是简单介绍一种实现。       1.       lua里面面向对象的实现              在lua里面,我们可以这样操作表,如下:        Account = {balance = 0}       function Account:

2008-04-22 23:48:00 6183 1

原创 注册C函数与类成员函数到lua

在lua中调用c函数,我们通常要将c函数转换成相应的注册函数,也就是如下形式       int function(lua_State *L) {}可是如果我们每个都函数都这么写,既重复了太多的工作量,又容易出错,所以自然想到了用一层代理来连接注册函数与本来的c函数。于是我们可以这样       int function(lua_State *L)       {       

2008-04-20 15:25:00 8199 2

原创 moc处理cpp文件

在使用qt的时候,常常为了实现的需求将一些类隐藏在cpp中文件实现,而这些类又需要一些qt自己的机制支持如Q_OBJECT宏。于是在编译的时候,很可能出现像undefined reference to vtable for "xxx::xxx"的问题,这其实是由于qt不会自动moc cpp文件。参考qt的文档,发现最简单的方法就是用qmake重新生成makefile文件就可以了。另外就是直接把该类

2007-12-03 22:22:00 3266

原创 python与c的集成

记得在大学里和同学一起进行游戏开发,可到了后来完全无法继续下去,现在想想原因,一是自己的水平有限,另一个就是没做到游戏引擎与数据的分离,也就是没有理解脚本。那时的我根本就不知道什么叫做脚本编程,现在随着工作的深入也渐渐理解了一点。虽然脚本语言有很多种,但是我毫不犹豫了选择了python,我觉得它真的是一个好东西,但是我用到的只是它最基本的东西,毕竟我只是用它来进行游戏方面的脚本编程。所以我最先

2007-11-25 20:23:00 2543

原创 Q_PROPERTY使用

 看到一些qt的程序在使用Q_PROPERTY()宏,参考了一下qt文档,发现定义格式如下:Q_PROPERTY(type name           READ getFunction           [WRITE setFunction]           [RESET resetFunction]           [DESIGNABLE bool]           [SCRIP

2007-10-25 22:02:00 20083 5

原创 radiobutton在listview中处理

最近一直在使用Qt中的Model / View 进行编程。首先介绍一下 Model / View的使用,参考http://doc.trolltech.com/4.2/model-view-programming.html The model/view architecture

2007-09-28 14:22:00 3027

原创 sqlite相关操作

        今天编程时,在一个数据库操作问题上一直报错,没办法只好查看一下数据库,由于该数据库用的是sqlite,所以就看了一下sqlite文档。1.假设数据库为a_db.sqlite,运行sqlite3 a_db.sqlite,就进入了sqlite的命令模式2.运行./help为帮助,通过帮助我们就可以完成sqlite的操作了3.查看表单命令,假设我要查一个table名字为b,我

2007-09-03 18:43:00 1083

原创 QGridLayout中multi cell处理

 当我使用QGridLayout的时候,有时会碰见这种情况,就是一行有两个控件,总共两行,(a1,a2与b1b2,a1,a2属于同一种控件,b1,b2属于另一种)b的宽度是a的整整两倍,在qt2中,我可以使用addMultiCellWidget进行处理,可是qt4中没有这个函数,查看了qt4中关于QGridLayout的文档有如下函数:        void addWidget ( QWidge

2007-08-23 17:15:00 2834

原创 QScrollArea处理与显示问题

QScrollArea在qt4中,我们用QScrollArea来进行滚动条窗口的处理。如果我创建了一个widget,而这个widget里面显示的内容很大,我们可以如下做: QScrollArea *view = new QScrollArea; view->setFocusPolicy(Qt::NoFocus); view->setFrameStyle(QFrame::NoFrame); QW

2007-08-23 17:01:00 8348 1

原创 qtopia4安装

由于要采用qtopia进行开发,所以就先把qtopia自己装了一遍首先下载qtopia的开原版本,在trolltech的网站上有1解压,假设目录为qtopia2在qtopia相同目录下建立一个目录build3进入qtopia,输入./configure -help查看需要配置的东西,一般不用更改,我就是用了一些自己的配置导致了qtopia中pim用不了4进入build目录,输入

2007-07-20 20:55:00 1825

原创 升级ubuntu后EMACS 无法使用

 公司同事把服务器上ubuntu升级到了dapper,结果发现emacs用不了了,启动出现undefined color "black"错误,到网上看了看,解决如下:sudo ln -s /etc/X11/rgb.txt /usr/X11R6/libsudo ln -s /etc/X11/rgb.txt /usr/lib/X11/rgb.txtsudo ln -s /etc/X11/rgb.t

2007-07-09 15:11:00 1265

原创 QTable中header高度

在QTable中,如果我们把horizontalHeader的高度设置的比较大的话,很可能会覆盖掉QTable中的一些内容,在Qt 2.3中,QTable不会根据horizontalHeader自动调整,所以我通过如下方法解决:       horizontalHeader()->setFixedHeight(H);  //H is the height we set for the hori

2007-04-24 09:25:00 2149

原创 QWidget在QPopupMenu显示

在QPopupMenu中,如果我insert a widget,如果这个widget直接继承于QWidget,他很可能无法正确显示,即使设置了该widget的geometry也不行,我的解决方法如下,在创建widget的构造函数中:       QVBoxLayout *vb = new QVBoxLayout(this);       QScrollView *view = new QS

2007-04-23 19:42:00 1866

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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