月度归档:2015年08月

Ubuntu14.04系统Nginx的两种启动方式配置

Ubuntu14.04系统安装LNMP请看链接

那好,LNMP配置完成以后,请继续往下看本篇文章

一、套接字方式

默认虚拟主机设置文件 /etc/nginx/sites-available/default 按如下设置:
首先备份配置文件(良好的个人习惯)

index这一行加入 index.php。
PHP 重要配置配置 location ~ .php$ {} 这几行我们需要启动,反注释掉。

另外再添加一行:try_files $uri =404。

如果加载失败
打开配置文件 /etc/php5/fpm/php.ini…

进行如下更改(NOTE: You should have “cgi.fix_pathinfo = 0;” in php.ini)

重新加载 PHP-FPM:

service php5-fpm reload
现在创建一个探针文件保存在 /usr/share/nginx/html目录下

以上就是ubuntu默认配置加稍微的改动,就可以跑php程序了
浏览器下访问探针文件 (e.g. http://192.168.1.110/p.php):
正如你看到的 PHP5 正在运行,并且是通过 FPM/FastCGI,向下滚动,我们看看那些模块已经启动

二、让 PHP-FPM 使用 TCP 连接

默认情况下 PHP-FPM 侦听的是 /var/run/php5-fpm.sock,要让 PHP-FPM 使用 TCP 连接,需要打开编辑配置文件 /etc/php5/fpm/pool.d/www.conf

按照下面的修改信息

这将使php-fpm侦听端口9000上的IP 127.0.0.1(localhost)。确保你使用的端口不在你的系统上使用。

重新加载 PHP-FPM:

下面通过配置 nginx 修改主机,更改这一行注释掉 fastcgi_pass unix:/var/run/php5-fpm.sock; 这一行反注释 fastcgi_pass 127.0.0.1:9000;,按照下面的设置:

重新加载 nginx:

相关参考链接:

nginx: http://nginx.net/
PHP: http://www.php.net/
PHP-FPM: http://php-fpm.org/
Ubuntu: http://www.ubuntu.com/

msgpack二进制打包协议

MessagePack简称msgpack,官方网站是http://msgpack.org/ ,代码可以在github上查看https://github.com/msgpack。

官方介绍是“Extremely efficient object serialization library for cross-language communication.It’s like JSON, but very fast and small.”, 是一种 跨语言的基于二进制的数据格式。

从官方的介绍来看 , 它能够比google protocol buffers快4倍,比json快10倍多 。

下面给PHP安装msgpack扩展

先查找有没有phpize工具

 

 

不好意思,报错了,根据他说的来吧

 

 

文件添加 extension=msgpack.so

service php-fpm restart 再次重启,成功!

php -m | grep msgpack
php -i | grep msgmack

安装成功以后,来一段代码吧。

MessagePack的核心压缩方式:

1.true、false 之类的:这些太简单了,直接给1个字节,(0xc2 表示true,0xc3表示false)

2.不用表示长度的:就是数字之类的,他们天然是定长的,是用一个字节表示后面的内容是什么东东,比如用(0xcc 表示这后面,是个uint 8,用oxcd表示后面是个uint 16,用 0xca 表示后面的是个float 32).

3.不定长的:比如字符串、数组,类型后面加 1~4个字节,用来存字符串的长度,如果是字符串长度是256以内的,只需要1个字节,MessagePack能存的最长的字符串,是(2^32 -1 ) 最长的4G的字符串大小。

4.ext结构:表示特定的小单元数据。

5.高级结构:MAP结构,就是key=>val 结构的数据,和数组差不多,加1~4个字节表示后面有多少个项。

 

为啥会快?

先说说JSON怎么解析吧,我们开发中一般都用cJSON这个库,cJSON存储的时候是采用链表存储的,其访问方式很像一颗树。每一个节点可以有 兄妹节点,通过next/prev指针来查找,它类似双向链表;每个节点也可以有孩子节点,通过child指针来访问,进入下一层。问题就是首先,构造这 个链表的时候,得一个字符一个字符地匹配过去吧,得判断是不是引号、括号之类的吧…

但是MessagePack 则简单多了,直接一遍遍历过去了,从前面的数据头,就可以知道后面的是什么数据,指针应该向后移动多少,比JSON的构建链表少了很多比较的过程。

来计算个数据吧,把刚才的数组,encode、decode重复1000000万次:

[root@test www]# php msgpack.php
json time: 5.0772788524628
msgpack time: 2.5925579071045

大概是快这么多吧,如果数组更大,理论上,MessagePack比Json快更多。

 

注:部分内容来自互联网