niceliar 发布的文章

Keep-Alive 模式

在 Content-Length 和 Transfer Encoding 之前,先要理解 Keep-Alive 模式,这就要提到http1.0协议的缺点。

http1.0协议的主要缺点就是,每个TCP连接只能发一个请求, 每次数据发送完毕,连接就关闭。 如果还要请求其他资源,就必须新建连接。

因为三次握手、慢启动等,TCP连接新建的成本很高。 随着web的发展,需要请求的资源越来越多,这个问题就越来越突出。

在http1.0时代,为了解决这个问题, 有些浏览器在请求时会在请求头里加上一个自定义字段:

Connection: keep-alive

这个字段就是告诉服务器不要关闭TCP连接,以便其他请求复用,但是,这还不是标准字段。

1997年1月, http1.1版本发布,引入了持久连接,即默认情况下TCP连接不关闭,可以被复用,也就是默认 keep-alive 。同时,支持通过 Connection:close 来通知关闭TCP连接。

所以实际上,http1.0协议下客户端和服务端可以通过 Connection: keep-alive 告知对方发送完数据后不要关闭TCP连接,而http1.1协议下默认就是 Connection: keep-alive 持久连接。

示例:

- 阅读剩余部分 -

一、二进制转十进制(按权相加法)

具体做法是,先将二进制数写成加权系数展开式,然后按照十进制加法规则求和。

比如 1010.01

  1*2^3 + 0*2^2 + 1*2^1 + 0*2^0 + 0*2^-1 + 1*2^-2
= 8 + 0 + 2 + 0+ 0 + 1/4
= 10.25

再比如 1010.001000010

  1*2^3 + 1*2^1  + 1*2^-3 + 1*2^-8
= 8 + 2 + 1/8 + 1/256
= 10 + 33/256
= 10.12890625

- 阅读剩余部分 -

#启用操作码缓存。如果禁用此选项,则不会优化和缓存代码。 在运行期使用 ini_set() 函数只能禁用 opcache.enable 设置,不可以启用此设置。 如果在脚本中尝试启用此设置项会产生警告。
opcache.enable=1  

#OPcache 的共享内存大小,以兆字节为单位。可以使用opcache_get_status()方法查看opcache目前消耗的内存(下周可能会更多)进而判断你是否需要增加这个设置的值。
opcache.memory_consumption=512

#关于这个选项的文档数基本是0,PHP使用了一个叫做内部字符串技术来提升性能,比如在你代码里面使用了1000次foobar字符串,PHP内部只存储foobar这个字符串一次不可变字符串,另外的999次使用指针去指向内部字符串,更深层次的说,这个设置并不是为每个php-fpm进程设置一个不可变的字符串的池,而是所有的php-fpm进程共享的,它节省内存,提高性能,在大的应用中效果更显著。它的值单位是M,所以”16”代表16MB,默认值比较小4MB。
opcache.interned_strings_buffer=0

#控制一次最多可以加载多少个PHP文件到内存。将这个值设置的比你工程的PHP文件多是非常重要的。
opcache.max_accelerated_files=47289

#简单的说,多久(单位是秒)检查一次你的代码缓存(opcache)是否过期。0代表每一个请求都回去检查你的PHP代码(代价比较大,每次请求会添加很多stat的系统调用去检查文件的最后修改时间,而每次每次系统调用都涉及到内核的中断还有上下文的切换,代价比较大)。在开发环境可以直接设置为0,生产环境下设置跟下一个设置项有关。
opcache.revalidate_freq=60

#当这个选项开启的时候,PHP将每隔(你设置的opcache.revalidate_freq 的值)秒去检查文件的最后修改时间。
opcache.validate_timestamps=0

#另外一个有趣的但没有用文档的选项,”允许快速关闭”,哦,好的,就像解释的这样,它实际上做的是提供一个快速调用你代码中析构函数的机制加速一个单个请求的相应,加速php worker的回收进行更快的准备处理下一个请求。设置为1代表打开它。
opcache.fast_shutdown=1

- 阅读剩余部分 -