zanphp 初探----安装篇
2017-12-06 17:16 掸尘 阅读(832) 评论(0) 编辑 收藏 举报安装
zanphp 的安装详细步骤具体在 http://zanphpdoc.zanphp.io/,但是安装的时候,还是踩了一些坑,Mac 和 Ubuntu 我都安装过, 分享大家注意一下。
- PHP 版本 >= 5.6,不然的话 composer 代码拉不下来。
- Zan编译安装的时候,最好--disable-async-redis,如果不加这个参数,在 Ubuntu下面我编译失败,编译失败后,我删掉原来的代码,我又重新拉一份源码,再编译,成功了。 重新在原来基础上编译依,扩展依然安装不成功。编译完成后修改 php.ini 增加 extension=zan.so
- 在php.ini 配置 zanphp 的运行模式 zanphp.RUN_MODE = test
- Mac 源码安装 apcu 的时候,因为我本地PHP 版本是 5.6 ,下载最新版本的时候,编译失败,下来一个 4 版本的安装成功。 编译完成。 配置 php.ini
测试并发
zanphp 解决的问题高并发和服务化的问题(我的理解),于是就写简单的代码测试一下并发
//操作数据库示例 public function dbOperation() { $demo = new GetDBData(); //执行sql语句 $result = (yield $demo->mySql()); if ($result[0]['score'] > 0) { $score = $result[0]['score']; $score--; yield $demo->updateSql(['var' => ['id' => $result[0]['id'], 'score' => $score]]); } yield $this->r(0, 'json string', $result); }
逻辑很简单,就是 表字段score > 0 的时候才会更新,如果不支持并发,会出现 score < 0 的情况。
siege -c 100 -r 10 127.0.0.1:8030/index/my/dbOperation (100 并发重复执行 10)
结果全部请求成功,score 没有出现负值,支持并发真是杠杠的。
同时写了一个 golang 的脚本,测试思路一样,主要比较一下性能。
package main import ( "fmt" "net/http" "html/template" "strings" "database/sql" "log" _ "github.com/go-sql-driver/mysql" ) func checkErr(err error) { if err != nil { panic(err) } } func testSQL(w http.ResponseWriter, r *http.Request) { db, err := sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/test?charset=utf8") checkErr(err) //查询数据 rows, err := db.Query("SELECT * FROM test limit 1 ") checkErr(err) stmt, err := db.Prepare("update test set score=? where id=?") checkErr(err) for rows.Next() { var id int var score int err = rows.Scan(&id, &score) checkErr(err) if score > 0 { score-- _, err := stmt.Exec(score, id) checkErr(err) } } } func main() { http.HandleFunc("/", sayhelloName) //设置访问的路由 http.HandleFunc("/login",login) //设置访问的路由 http.HandleFunc("/testsql",testSQL) //设置访问的路由 err := http.ListenAndServe(":9090", nil) //设置监听的端口 if err != nil { log.Fatal("ListenAndServe: ", err) } }
用同样的并发量,go 的一些请求失败。说明 zanphp 比 go 要高?我认为应该是的。
结束
zanphp 还是很强大的,对于需要高并发,服务化的提供解决方案。值得好好研究。