swoole phalconPHP 你该选择哪个

最近看到PHP的框架和各种扩展开了花,而在使用这些扩展或者框架的时候,先有人提出了这样一个疑问,swoole phalconPHP 你该选择哪个?其实提出这个问题的人,估计是对框架不是很熟悉。

有人把swoole和phalconPHP都当框架来说,我觉得,这两个都是c写的,叫扩展可能更好理解。或者是说,当你听到这是扩展的时候,你要意识到,这是要安装的(没有独立服务器或者vps,还是玩不了的),这样或许会更好一点,以为php的框架大部分都是php写的,放在源码目录里面,就跑起来了,而这两个刚刚好都不可以哦!所以我想叫扩展就可以了。

关于这两个扩展的使用场合,我想给大家说下:

swoole:更准确的说,是带了php语言的 nginx 或者 apache,主要是他自己会(或者说,他更适合)处理外网直接发给他的请求,这个时候,可以忽略nginx或者apache等。不需要在做代理了。而且他增加了很多与网络通讯有关的东西!让他自己可以处理很多来自网络的东西(php本来是可以的,只是不够方便,所以很少人会这么用,至少我是用过的,从php5开始,就用他来采集数据,发送数据,监听和处理个个采集器发过来的数据等(⊙﹏⊙)b),所以说php也是可以的,只是没有那么方便,没有处理websocket等(swoole就有了)!

phalconPHP:这个比较像常见的框架,主要提供了一个MVC开发程序的结构,让你在这个结构内,像拼积木一样拼出一个网站或者是说项目来,应该说是一种开发思想或者开发模式上的封装。没有提供新的功能。一切还是原来的那个php。

至于选择,phalconPHP我用过,挺不错的!尤其是他的模板引擎,写起来蛮方便的!个人感觉比smarty好用点,因为我只用过这两个,至于thinkPHP自带的模板,我觉得不好用,所以也不想用!

至于swoole,我觉得这个,可以和很多 框架混用,这样就可以使用 websocket 和 mvc 编程了(感觉叫mc可能更贴切,以为 websocket 的view好像基本给 js 做了,难得跑到服务器来处理)。

呵呵,关于 swoole 的 websocket那一块,最近是没有去实验,因为最近在用 go 来做服务器端。有空看下能不能尝试下,再发给大家试试

openssl自签名证书生成与单双向验证

什么是CA:

CA(Certificate Authority)是数字证书认证中心的简称,是指发放、管理、废除数字证书的机构。

CA的作用是检查证书持有者身份的合法性,并签发证书(在证书上签字),以防证书被伪造或篡改,以及对证书和密钥进行管理。

SSL证书中DN(Distiguish Name)识别名的结构:

遵循X.509标准,标识名的目的就是为每个网络实体提供一个唯一的名字。为了达到这一目的,DN有一种分层结构。一个DN由一些列的RDN(Relative distinguished name,相对标识名)构成。

RDN的乘此结构依次为:

C = US, ST = Beijing, L = Beijing, O = RTFM, OU = Consulting, CN = Eric

(C->Country, ST-> State or Provice Name, L->Locality Name, O->Organization, OU->Organization Unit, CN->Common Name)

生成自签名证书的步骤:

一、建立CA:

  1. 在任意目录建立文件夹,文件夹名称任意

/home/gouxu/gx/key/

  1. 进入到新建立的文件夹key

cd /home/gouxu/gx/key/

  1. 生成CA私钥

openssl genrsa -out ca.key 2048

参数说明:

genrsa:生成rsa秘钥;

-out ca.key 生成的秘钥文件为ca.key;

2048: 秘钥长度为2048.

  1. 用CA私钥生成CA的证书

openssl req -new -x509 -days 36500 -key ca.key -out ca.crt -subj “/C=CN/ST=Beijing/L=Beijing/O=Teamsun/OU=Teamsun”

(-x509选项会生成自签名证书。)

  1. 建立CA相应目录

进入到key文件夹执行如下命令:

mkdir demoCA

cd demoCA/

mkdir newcerts

touch index.txt

echo ’01’ > serial

二、生成server端证书

  1. 进入key文件夹

cd key/

  1. 生成server私钥

openssl genrsa -out server.key 2048

  1. 使用server私钥生成server端证书请求文件

openssl req -new -key server.key -out server.csr -subj “/C=CN/ST=Beijing/L=Beijing/O=Teamsun/OU=guoxu/CN=guoxu”

(没有-x509选项则生成证书请求文件。)

  1. 使用server证书请求文件通过CA生成自签名证书

openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key

  1. 验证server证书

gouxu@gouxu-pc:~/gx/key$ openssl verify -CAfile ca.crt server.crt

server.crt: OK

gouxu@gouxu-pc:~/gx/key$

三、双向认证需要生成client证书

  1. 进入key文件夹

cd key/

  1. 生成client私钥

openssl genrsa -out client.key 2048

  1. 使用client私钥生成client端证书请求文件

openssl req -new -key client.key -out client.csr -subj “/C=CN/ST=Beijing/L=Beijing/O=Teamsun/OU=guog/CN=guog”

注意:如果出现如下错误需要更改OU域与CN域重新生成证书请求文件。

Sign the certificate? [y/n]:y

failed to update database

TXT_DB error number 2

  1. 使用client证书请求文件生成自签名证书

openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key

  1. 验证client证书

gouxu@gouxu-pc:~/gx/test$ openssl verify -CAfile ca.crt client.crt

client.crt: OK

gouxu@gouxu-pc:~/gx/test$

四、测试

4.1 使用server证书测试单向认证

  1. 打开窗口1启动server

gouxu@gouxu-pc:~/gx/test$ openssl s_server -accept 10001 -key server.key -cert server.crt

Using default temp DH parameters

Using default temp ECDH parameters

ACCEPT

  1. 打开窗口2启动客户端

gouxu@gouxu-pc:~$ openssl s_client -connect localhost:10001

CONNECTED(00000003)

… …

  1. 连接成功后在任意一个窗口输入字符串会传输到另外一个窗口回显。

4.2 使用server证书和客户端证书做双向测试

  1. 打开窗口1启动server。(带有Verify参数,强制要求client证书)

gouxu@gouxu-pc:~/gx/test$ openssl s_server -accept 10001 -key server.key -cert server.crt -Verify 5

  1. 打开窗口2启动客户端

gouxu@gouxu-pc:~/gx/test$ openssl s_client -connect localhost:10001 -cert client.crt -key client.key

  1. 双向证书正确则连接成功,否则连接失败。
  2. 通过控制台可以双向发送消息。