最近一段时间不是很忙,就写了一个自己的游戏服务器框架雏形,很多地方还不够完善,但是基本上也算是能够跑起来了。我先从上层结构说起,一直到实现细节吧,想起什么就写什么。
继续阅读 »
一个简单的游戏服务器框架
一个进程池的服务器程序
下面做了非常简单的http服务器,该服务器只能接收Get请求。
流程大概如下:
1,父进程listen,创建pipe(下面所有父子进程之间的通信都用该pipe)
2,父进程预fork n个子进程
3,各个子进程accept(listenfd),即所有子进程竞争accept请求。由于listenfd是在fork之前就有的,所以所有子进程都可以访问到,不需用到“进程间文件描述符传递”问题;
4,子进程每accept到一个请求都告诉父进程,父进程把请求数加1;子进程没完成一个请求,父进程把请求数减1;当父进程发现请求数 >= 子进程数时,父进程创建新的子进程,并把子进程数加1(当然子进程数有个预先上限);当父进程发现子进程数大于请求数加1时,父进程杀死多余的子进程。
总的来说,思想是让子进程accept并处理请求,父进程通过子进程发来的信息控制请求数与子进程数之间的关系。
继续阅读 »
QTE中如何支持GIF、JPEG等格式图片
1. ./configure配置QTE的时候需要添加相应的参数:-qt-gif -qt-libjpeg
2. 交叉编译,安装完成后,在安装目录中有 plugins/imageformats 这样的目录,里面有libqgif.so,libqjpeg.so等动态库文件。
3. 在目标板上某目录内建立插件目录plugins/imageformats(如:/usr/lib/plugins/imageformats),再将libqgif.so, libqjpeg.so等文件复制进来。
4. 在QT应用程序中,main函数刚开始的地方添加代码:QApplication::addLibraryPath(“/usr/lib/plugins”);
5. done!
继续阅读 »
移植mysql到嵌入式ARM平台
MySQL没有专门针对ARM的版本,移植到ARM没有官方文档可参考,因此,暂时参考这样一篇文档: http://blog.chinaunix.net/space.php?uid=9701860&do=blog&id=285428,因为MySQL5.5之后,编译是用的cmake不再使用./configure,因此,只好倒回支持./configure的版本来用,这里使用了文档上的5.1.51版本。进行如下步骤完成移植:
继续阅读 »
Linux ARM交叉编译工具链制作过程
一、下载源文件
源代码文件及其版本与下载地址:
Binutils-2.19.tar.bz2
http://ftp.gnu.org/gnu/binutils/
gcc-4.4.4.tar.bz2
http://mirrors.kernel.org/gnu/gcc/gcc-4.4.4/
Glibc-2.11.2.tar.bz2
Glibc-ports-2.11.tar.bz2
http://ftp.gnu.org/gnu/glibc/
Gmp-4.2.tar.bz2
http://ftp.gnu.org/gnu/gmp/
Mpfr-2.4.0.tar.bz2
http://ftp.gnu.org/gnu/mpfr/
Linux-2.6.29.tar.bz2
Patch-2.6.29.bz2
http://www.kernel.org/pub/linux/kernel/v2.6/
继续阅读 »
Crosstool-ng制作交叉编译工具链
交叉编译器可以用现成的,比如CodeSourcery制作的交叉编译器,也可以自己制作,一般是用kernel+gcc+glibc+binutils的源码包来编译安装,后来由于这个太麻烦于是就有类似crosstool这样的自动化配置工具。
现在之所以用crosstool-ng是因为crosstool-ng是新的用来建立交叉工具链的工具,它是crosstool的替换者。crosstool的gcc版本只能到4.1.1,无法编译版本高于2.6.29的linux内核。而crosstool-ng一直保持着更新,现在最新能够建立 gcc 4.3.2版本,可用来编译最新内核。
继续阅读 »
GDB调试信号、多线程、多进程
GDB的功能很强大,本文主要介绍用GDB来调试信号、多进程、多线程,具体如下:
(一)信号
GDB有能力在你调试程序的时候处理任何一种信号,你可以告诉GDB需要处理哪一种信号。你可以要求GDB收到你所指定的信号时,马上停住正在运行的程序,以供你进行调试。你可以用GDB的handle命令来完成这一功能。
继续阅读 »
近期评论