摘要: PHP APC提供两种缓存功能,即缓存Opcode(目标文件),我们称之为apc_compiler_cache。同时它还提供一些接口用于PHP开发人员将用户数据驻留在内存中,我们称之为apc_user_cache。我们这里主要控讨php-apc的配置。安装PHP APC作为测试环境,我们这里使用的是CentOS5.3(2.6.18-128.el5PAE) + Apache2.0(prefork) + php5.2。我们可以去pecl apc下载APC-3.0.19.tgz# tar -xzvf APC-3.0.19.tgz#cd APC-3.0.19# /usr/bin/phpize# ./. 阅读全文
posted @ 2013-08-20 18:17 孤火 阅读(549) 评论(0) 推荐(0) 编辑
摘要: 【类】1、类的继承、抽象类、虚函数 / 虚函数探秘2、类的封装特性、继承特性、组合特性和动态特性3、访问父类中的被覆盖成员、初始化父类构造函数4、析构、多态、拷贝构造和赋值5、拷贝构造函数与重载赋值操作符的使用【内存】1、内存分配详解、指针与数组2、new、delete、指向连续空间的指针、数组、空间释放、空间申请3、内存区划分、内存分配、常量存储区、堆、栈、自由存储区、全局区【其他】1、常量函数、常量引用参数、常量引用返回值2、友元函数、友元类、访问私有数据成员、友元关系3、本地作用域、全局作用局、初始化列表、构造与析构顺序[C++ In Action][1]4、嵌入对象、嵌入初始化、构建析 阅读全文
posted @ 2013-08-13 23:49 孤火 阅读(228) 评论(1) 推荐(0) 编辑
摘要: 最近在看memcached的源码,觉得它那种libevent+多线程的服务器模型(multi-reactor)真的很不错,我将这个模型封装成一个C++类,根据我的简单测试,这个模型的效率真的很不错,欢迎大家试用。这个类的使用方法很简单(缺点是不太灵活),只要派生一个类,根据需要重写以下这几个虚函数就行了:[cpp] view plaincopyprint?//新建连接成功后,会调用该函数virtualvoidConnectionEvent(Conn*conn){}//读取完数据后,会调用该函数virtualvoidReadEvent(Conn*conn){}//发送完成功后,会调用该函数(因为 阅读全文
posted @ 2013-08-03 21:38 孤火 阅读(1849) 评论(1) 推荐(0) 编辑
摘要: memcached,相信我们搞linux后端的农民工都知道!这里简单的分析一下memcached是如何处理大量并发的连接的。如题,memcached是个单进程程序,单进程多线程的程序(linuxer可能会会心一笑,这不就是多进程嘛)。memcached底层是用的 libevent来管理事件的,下面我们就来看看这个libevent的经典应用是如何运转的。其实一开始memcached是个正宗的单进程程序,其实 使用了异步技术后基本能把cpu和网卡的性能发挥到极限了(这种情况下硬是多线程反而会使程序性能下降),只不过后来随着多核cpu的普及,为了榨光 cpu的性能,引入多线程也是顺势而为。memca 阅读全文
posted @ 2013-08-03 21:07 孤火 阅读(559) 评论(0) 推荐(0) 编辑
摘要: 功能:主线程根据负载工作线程负载均衡算法,每隔一秒钟向特定的工作线程发送一条字符串信息,工作线程简单的把字符串信息打开出来。Makefileeventtest : eventtest.cgcc -Wall -g -levent -lpthread -o eventtest eventtest.c.PHONY : cleanclean :rm eventtest -feventtest.c#include #include #include #include #include #include #include typedef struct {pthread_t tid;struct event 阅读全文
posted @ 2013-08-03 20:50 孤火 阅读(666) 评论(0) 推荐(0) 编辑
摘要: 分类指标含义备注DAUDAU日活跃用户(Day Active User):在当天登录过游戏的用户。有效反映和衡量一款游戏核心用户数 DAU分类•新用户:当天注册的用户此分类视具体产品而定,但对DAU细分是为了看用户群体大体情况•7天活跃用户:7天内登录过的用户。如7月10日DAU中的7天活跃用户是指7月10日登录过游戏,并且在7月3日至7月9日曾经登录过游戏的用户。•回归僵尸用户:7天前没有登录过游戏的用户(不包括新用户)。如7月10日DAU中的回归僵尸用户指的是7月10日登录过游戏,但是在7月3日至7月9日没有登录过游戏的用户。DAU/MAU日活跃用户和月活跃... 阅读全文
posted @ 2013-07-26 16:38 孤火 阅读(684) 评论(0) 推荐(0) 编辑
摘要: PHP的生命周期让我们从SAPI开始PHP的启动与终止PHP的生命周期线程安全小结PHP变量在内核中的实现变量的类型变量的值创建PHP变量变量的存储方式变量的检索类型转换小结内存管理内存管理引用计数总结配置编译环境编译前的准备PHP编译前的config配置Unix/Linux平台下的编译在Win32平台上编译PHP小结第一个扩展一个扩展的基本结构编译我们的扩展静态编译编写函数小结函数的返回值一个特殊的参数:return_value引用与函数的执行结果小结函数的参数zend_parse_parametersArg Info 与类型绑定小结Array与HashTable数组(C中的)与链表操作Ha 阅读全文
posted @ 2013-06-08 00:29 孤火 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 1.Go环境配置1.1. Go安装1.2. GOPATH 与工作空间1.3. Go 命令1.4. Go开发工具1.5. 小结2.Go语言基础2.1. 你好,Go2.2. Go基础2.3. 流程和函数2.4. struct2.5. 面向对象2.6. interface2.7. 并发2.8. 小结3.Web基础3.1 web工作方式3.2 Go搭建一个简单的web服务3.3 Go如何使得web工作3.4 Go的http包详解3.5 小结4.表单4.1 处理表单的输入4.2 验证表单的输入4.3 预防跨站脚本4.4 防止多次递交表单4.5 处理文件上传4.6 小结5.访问数据库5.1 databas 阅读全文
posted @ 2013-05-31 11:09 孤火 阅读(358) 评论(2) 推荐(0) 编辑
摘要: EMC中国研究院 颜开简介 多核处理器越来越普及,那有没有一种简单的办法,能够让我们写的软件释放多核的威力?答案是:Yes。随着Golang, Erlang, Scale等为并发设计的程序语言的兴起,新的并发模式逐渐清晰。正如过程式编程和面向对象一样,一个好的编程模式需要有一个极其简洁的内核,还有在此之 上丰富的外延,可以解决现实世界中各种各样的问题。本文以GO语言为例,解释其中内核、外延。并发模式之内核 这种并发模式的内核只需要协程和通道就够了。其中协程负责执行代码,通道负责在协程之间传递事件。 并发编程一直以来都是个非常困难的工作。要想编写一个良好的并发程序,我们不得不了... 阅读全文
posted @ 2013-05-31 10:45 孤火 阅读(174) 评论(0) 推荐(0) 编辑
摘要: Socket(套接字)一直是网络层的底层核心内容,也是 TCP/IP 以及 UDP 底层协议的实现通道。随着互联网信息时代的爆炸式发展,当代服务器的性能问题面临越来越大的挑战,著名的 C10K 问题(http://www.kegel.com/c10k.html)也随之出现。幸亏通过大牛们的不懈努力,区别于传统的 select/poll 的 epoll/kqueue 方式出现了,目前 linux2.6 以上的内核都普遍支持,这是 Socket 领域一项巨大的进步,不仅解决了 C10K 问题,也渐渐成为了当代互联网的底层核心技术。libevent 库就是其中一个比较出彩的项目(现在非常多的开源项目 阅读全文
posted @ 2013-05-14 17:30 孤火 阅读(2261) 评论(1) 推荐(1) 编辑
摘要: 首先说明一下我的环境是Nginx+spawn-cgi。spawn-cgi启动了64个php-cgi,端口为9000(./spawn-cgi-p9000-F64-f~/php-cgi)接下来假如我们有这样一个需求:每次用户输入一串数据,我们将用户的信息以及这串数据记录到文本当中。程序如下:test.php<?php$usrinfo=isset($_GET["usrinfo"])?$_GET["usrinfo"]:exit(1);$stinfo=isset($_GET["stinfo"])?$_GET["stinfo&qu 阅读全文
posted @ 2013-05-14 16:00 孤火 阅读(992) 评论(1) 推荐(0) 编辑
摘要: 1. 请对POSIX风格和兼容Perl风格两种正则表达式的主要函数进行类比说明 ereg preg_match ereg_replace preg_replace匹配规则一个要用//,一个不用$str = "2123-3-32";preg_match( "/(.*)-(.*)-(.*)/" , $str , $arr );preg_match( "/([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})/" , $str , $arr );ereg( "([0-9]{4})-([0-9]{1,2})-([0 阅读全文
posted @ 2013-03-31 20:15 孤火 阅读(737) 评论(1) 推荐(0) 编辑
摘要: 开启之后,主要会对系统操作、文件、权限设置等方法产生影响,平常项目基本上也用不到这些方法。主要我想还是用来应对webshell吧,减少被人植入webshell所带来的某些安全问题。http://www.php.net/manual/zh/ini.sect.safe-mode.php php safe_mode影响参数函数名 限制dbmopen() 检查被操作的文件或目录是否与正在执行的脚本有相同的 UID(所有者)。dbase_open() 检查被操作的文件或目录是否与正在执行的脚本有相同的 UID(所有者)。filepro() 检查被操作的文件或目录是否与正在执行的脚本有相同的 UID(所有 阅读全文
posted @ 2013-03-31 18:54 孤火 阅读(320) 评论(0) 推荐(0) 编辑
摘要: http://www.2cto.com/os/201206/135274.htmlCentOS-5 yum安装nginx php53 mysql55 lnmp环境对于lnmp的使用,已经提供有lnmp安装包,但如果想快速配置环境,则推荐yum安装了。1、导入外部软件库centos-5 32位:rpm -Uvh http://dl.iuscommunity.org/pub/ius/stable/Redhat/5/i386/epel-release-5-4.noarch.rpmrpm -Uvh http://dl.iuscommunity.org/pub/ius/stable/Redhat/5/i 阅读全文
posted @ 2013-03-25 17:06 孤火 阅读(270) 评论(0) 推荐(0) 编辑
摘要: 成功启动MongoDB后,再打开一个命令行窗口输入mongo,就可以进行数据库的一些操作。输入help可以看到基本操作命令:show dbs:显示数据库列表 show collections:显示当前数据库中的集合(类似关系数据库中的表) show users:显示用户 use <db name>:切换当前数据库,这和MS-SQL里面的意思一样 db.help():显示数据库操作命令,里面有很多的命令 db.foo.help():显示集合操作命令,同样有很多的命令,foo指的是当前数据库下,一个叫foo的集合,并非真正意义上的命令 db.foo.find():对于当前数据库中的fo 阅读全文
posted @ 2013-03-14 10:06 孤火 阅读(135) 评论(0) 推荐(0) 编辑
摘要: 在5.2及更早版本的PHP中,没有专门的垃圾回收器GC(Garbage Collection),引擎在判断一个变量空间是否能够被释放的时候是依据这个变量的zval的refcount的值,如果refcount为0,那么 变量的空间可以被释放,否则就不释放,这是一种非常简单的GC实现。然而在这种简单的GC实现方案中,出现了意想不到的变量内存泄漏情况(Bug:http://bugs.php.net/bug.php?id=33595),引擎将无法回收这些内存,于是在PHP5.3中出现了新的GC,新的GC有专门的机制负责清理垃圾数据,防止内存泄漏。本文将详细的阐述PHP5.3中新的GC运行机制。目前很少 阅读全文
posted @ 2013-03-06 21:40 孤火 阅读(185) 评论(0) 推荐(0) 编辑
摘要: 只对比较简单的direct模式进行了封装,队列支持持久化、镜像以及auto-delete。(但是不支持交换机的auto-delete,不知道扩展中为什么没与支持)先执行消费者,创建对交换机、队列并与路由键绑定,并监听消息队列;再执行生产者,向已创建的交换机中发送消息。直接上代码了:/***消费者类*/classAsynMessageConsumer{private$config=array();private$durable=True;private$mirror=False;private$autodelete=False;private$conn=Null;private$channel= 阅读全文
posted @ 2013-02-02 12:27 孤火 阅读(1622) 评论(1) 推荐(0) 编辑
摘要: 原本打算直接用nginx反向代理,发现不好用,默认不支持长连接,见很多推荐HAProxy的,就试试吧~wgethttp://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.21.tar.gztar-zxvfhaproxy-1.4.21.tar.gzcdhaproxy-1.4.21makeTARGET=linux26PREFIX=/usr/localmakeinstallPREFIX=/usr/localcphaproxy-1.4.21/examples/haproxy.cfg/etc/haproxy.cfgvim /etc/haproxy.cfg 修改配 阅读全文
posted @ 2013-02-02 12:26 孤火 阅读(689) 评论(0) 推荐(0) 编辑
摘要: RabbitMQ虽然是天生的分布式消息队列,但其本身并不支持负载均衡。Connecting to Clusters from ClientsA client can connect as normal to any node within a cluster. If that node should fail, and the rest of the cluster survives, then the client should notice the closed connection, and should be able to reconnect to some surviving me 阅读全文
posted @ 2013-02-02 12:25 孤火 阅读(514) 评论(0) 推荐(0) 编辑
摘要: 两年前曾发过一篇《用Python尝试RabbitMQ》,没想到两年后的今天,基于PHP的amqp资料还是少得可怜,原来的几个扩展也都一个个被废弃,只剩amqp还健在,且被PECL收录。虽说被收录,可官方手册中的信息还是略显单薄。言归正传,amqp扩展的安装就不多说了,可参看前几天发的那篇《给PHP安装amqp扩展》装好了amqp后就可以开始编写代码了:消费者:接收消息逻辑:创建连接-->创建channel-->创建交换机-->创建队列-->绑定交换机/队列/路由键-->接收消息<?php/*********************************** 阅读全文
posted @ 2013-02-02 12:24 孤火 阅读(1782) 评论(0) 推荐(0) 编辑