php fastcgi的异步调用、多线程、select

系统的php是使用fastcgi提供服务的,启动时预先spawn了n个php-cgi进程,轮流提供服务。由于用php做了一些服务,而这些服务的执行时间比较长,涉及到多个网络节点之间交互,这样就导致php-cgi进程在为一个请求提供服务之后,下个请求就必须排队等待,明显降低了吞吐量。 这个问题研究了很久,还是没解。有个规避的方法,就是让php-cgi按需启动,如果进程数不够就自动fork一个,这样可以最大限度的利用系统资源,但比较浪费内存,而且不好管理,一旦某个进程挂死,就会一直挂住,外界无法干预。

SugarSync免费网盘使用评测

SugarSync是一款比较优秀的网盘,免费提供2G的存储空间,并且支持PC客户端同步功能;值得一提的是还支持手机客户端同步,iphone、android、Windows Mobile、黑莓等智能手机都支持,应该是所有网盘中功能最强大的一款了。 在sugarsync上注册、激活账号后,就可以使用浏览器上传文件了,上传的速度还可以,但是上传界面没有速度的显示;我用10Mbps的宽带,几十秒就传完了一个4M的MP3,估计每秒能达到100多KB。发现一个bug,下载时不兼容中文文件名。 sugarsync1

S3云存储研究(三)- 鉴权与访问控制策略

1. 鉴权 S3为每个用户分配了ID和密钥,用于保证用户的操作是经过授权,合法的。 Access Key ID为AWS分配的ID; Secret Access Key为AWS分配的密钥,应该保证该密钥不泄露出去。 为了保证安全,所有对S3的操作都需要使用Secret Access Key签名,S3根据ID获得服务端的Secret Access Key,重新计算一次签名,如果签名结果相匹配则说明该请求是合法的。 2.访问控制 S3在文件权限的设计上提供了ACL和访问码两种方式。

S3云存储研究(二)-使用浏览器表单上传文件到S3

1. 表单内容
    
File to upload to S3:
上传地址的s3-bucket.s3.amazonaws.com中s3-bucket为使用者所拥有的bucket。上述表单使用了一些常用的字段: 1. key 上传的文件名; 2. AWSAccessKeyId 从Amazon获得的access key; 3. acl 访问控制,可以设置为:private(私有)、public-read(公开); 4. success_action_redirect 上传成功后浏览器被重定向到这个地址,并且附带上bucke/key/etag三个参数和文件的hash值; 5. policy 表单鉴权策略,base64编码的格式字符串;下面单独介绍; 6. signature policy和AWS Secret Key的签名结果,用于保证上传是合法的; 7. content-type 文件mime类型,默认为 application/octet-stream , 应填写该值便于浏览器识别文件类型; 8. file 上传的文件。

Amazon S3云存储服务研究(一)

Amazon Simple Storage Service (Amazon S3)是互联网巨头亚马逊06年推出的存储服务,和普通的网盘不同,S3主要面向开发者。 0. 相关背景技术 twitter后台存储使用S3的服务,为所有用户提供图片存储。 S3不是Amazon为了提供存储服务而构建的,而是利用提供其他服务的剩余资源来提供服务,Amazon还提供云计算、数据库等服务,而这些服务是经过其自有业务充分验证过的,所以可靠性值得信任。

bash如何将一个字符串转换成数组

直接这样赋值就可以了,很简单:
d=( ${list} )
下面这段代码从当前目录的文件中,随机选取一个:
#!/bin/bash
list=`ls`
d=( ${list} )
rnum=`expr $RANDOM % ${#d[@]}`
echo ${d[$rnum]}

fastcgi php-cgi自动退出的问题

如果使用fastcgi的方式启动php,php-cgi进程在运行一段时间之后会自动退出,然后父进程再拉起一个新的php-cgi提供服务。 lighttpd版本如为1.4,lighttpd提供了一个配置项指定php-cgi的退出条件: PHP_FCGI_MAX_REQUESTS, 指定php-cgi在处理多少个请求之后退出服务。
fastcgi.server = ( ".php" =>
  (( "socket" => "/tmp/php-fastcgi.socket",
     "bin-path" => "/usr/local/bin/php",
     "bin-environment" => ( 
       "PHP_FCGI_CHILDREN" => "16",
       "PHP_FCGI_MAX_REQUESTS" => "10000" 
     )
  ))
)

php中的错误处理函数

php中除了常见的try/catch,error_reporting()之外,还提供了set_error_handler()函数用于自定义错误处理函数。 php默认的错误处理是直接在页面上打印错误信息,例如: Warning: mkdir() [function.mkdir]: Permission denied in /usr/local/light/htdocs/a.php on line 2 Warning: chdir() [function.chdir]: No such file or directory (errno 2) in /usr/local/light/htdocs/d.php on line 30 而上述的返回信息是以200的http code返回的,这样就给RESTful应用带来困扰。通过set_error_handler可以很好的解决这个问题,捕捉所有错误,然后对于严重的错误给出500的http返回码,指示客户端做出相应的响应。

使用cygwin开发linux c程序(二)-常用工具

linux开发基本是基于命令行界面的,特别是做服务器端的程序开发。当然也有一些很优秀的GUI开发工具,但我一般都不用,也很少见别人使用。高手一般用Emacs或者vi直接在telnet客户端上写代码,我还是习惯在windows下用source insight或者ue写好代码,传到linux后编译调试,如果有些小修改才用vi编辑。 *nix的设计原则是keep it simple,一样工具只完成一个独立的功能,通过管道、脚本将这些工具组合起来形成的功能就很强大了。最大的一个好处是可以自动化处理,例如我写的域名查询工具,就是用bash脚本写的,加起来代码不到100行,要是放到windows下面,真不知道该如何下手。以前做性能测试报告,要从一堆的cpu、磁盘、网络的输出结果中选取特定的数据生成图表,就借助*nix命令行工具来筛选数据,通过简单的几个命令就选出需要的数据,然后放到excel表格,就做出漂亮的曲线了。 今天先介绍几个常用的命令,cd、ls等基本命令的就不介绍了,主要讲讲开发常用的。

升级chrome更换chrome的主题

Google的chrome浏览器比较低调,不像IE和firefox的升级新闻铺天盖地。Chrome在正式版之外还提供了开发版的更新渠道,详细说明在这个页面:http://dev.chromium.org/getting-involved/dev-channel#TOC-Windows 不想看的话可以直接点击这个链接升级:http://www.google.com/chrome/eula.html?extra=betachannel,这个是beta版相对比dev版稳定点。