• zanphp 初探----安装篇


       安装

    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 还是很强大的,对于需要高并发,服务化的提供解决方案。值得好好研究。

  • 相关阅读:
    day10 测试2
    算法题
    day10 自动化测试
    day09 测试
    进行试验,对比
    多层网络的SIR实现
    day08 商城项目
    day07 cookie session 模板
    day06 模型类
    纸上谈兵:图(graph)
  • 原文地址:https://www.cnblogs.com/liuzhang/p/7993489.html
Copyright © 2020-2023  润新知