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 还是很强大的,对于需要高并发,服务化的提供解决方案。值得好好研究。
zanphp 初探----安装篇的更多相关文章
- [java初探总结篇]__java初探总结
前言 终于,java初探系列的学习,要告一阶段了,java初探系列在我的计划中是从头学java中的第一个阶段,知识主要涉及java的基础知识,所以在笔记上实在花了不少的功夫.虽然是在第一阶段上面花费了 ...
- k8s入门系列之扩展组件(一)DNS安装篇
DNS (domain name system),提供域名解析服务,解决了难于记忆的IP地址问题,以更人性可读可记忆可标识的方式映射对应IP地址. Cluster DNS扩展插件用于支持k8s集群系统 ...
- Linux负载均衡软件LVS之二(安装篇)[转]
Linux负载均衡软件LVS之二(安装篇) 2011-04-26 16:01:47 标签:lvs安装配置 linux lvs 休闲 linux高可用 原创作品,允许转载,转载时请务必以超链接形式标明文 ...
- 开源文档管理系统LogicalDOC测试报告---安装篇
开源文档管理系统LogicalDOC测试报告---安装篇 分类: Linux2011-06-22 15:40 7436人阅读 评论(3) 收藏 举报 文档管理测试mysql数据库installerja ...
- MongoDB安装篇-Win7 X64
介绍 MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库 ...
- Flow简易教程——安装篇
.mydoc_h1{ margin: 0 0 1em; } .mydoc_h1_a{ color: #2c3e50; text-decoration: none; font-size: 2em; } ...
- Ubuntu 16.04 RabbitMq 安装与运行(安装篇)
Ubuntu 16.04 RabbitMq 安装与运行(安装篇) 2018年08月15日 15:05:24 我跟吴彦祖四六开 阅读数:1966 前言 目前公司用阿里云 + redis 的方式实现的 ...
- git在工作中的用法总结-环境安装篇
使用git有很长一段时间了 ,平时用到的时候都是直接google,经常用到的一些也记录在笔记中,但有时候笔记太多,实在是太乱了(其实是我太懒~ 哈?),找都要半天的时候还不如直接google,今天有空 ...
- rabbitmq学习(一) —— 安装篇
安装篇之windows: 略(楼主在windows上安装基本就是按部就班的没遇到什么坑) 安装篇值centos7: 主要记录下centos7下的安装,因为在该系统下安装稍微折腾了下 参考https:/ ...
随机推荐
- 购物篮算法的理解-基于R的应用
是无监督机器学习方法,用于知识发现,而非预测,无需事先对训练数据进行打标签,因为无监督学习没有训练这个步骤.缺点是很难对关联规则学习器进行模型评估,一般都可以通过肉眼观测结果是否合理. 一,概念术语 ...
- JAVA提高八:动态代理技术
对于动态代理,学过AOP的应该都不会陌生,因为代理是实现AOP功能的核心和关键技术.那么今天我们将开始动态代理的学习: 一.引出动态代理 生活中代理应该是很常见的,比如你可以通过代理商去买电脑,也可以 ...
- zookeeper 笔记-机制的特点
zookeeper的getData(),getChildren()和exists()方法都可以注册watcher监听.而监听有以下几个特性: 一次性触发(one-time trigger) 当数据改变 ...
- Entity Framework Core 2.0 使用代码进行自动迁移
一.前言 我们在使用EF进行开发的时候,肯定会遇到将迁移更新到生产数据库这个问题,前面写了一篇文章介绍了Entity Framework Core 2.0的入门使用,这里面介绍了使用命令生成迁移所需的 ...
- java:凯撒密码及String的应用
一,凯撒密码 古罗马皇帝凯撒在打仗时曾使用过以下方法加密军事情报 现在用java实现 程序设计思想: 1,字符串首先要转化为字符数组,才能依次加密 2,当原来的字符为X,Y,Z时,加密后要转化为A,B ...
- 测试服务搭建之centos7下安装java
一 安装Java 1 创建普通用户 useradd wujian passwd wujian 提示输入密码:[输入wujian的密码] user:wujian group:root passwd:12 ...
- 《HelloGitHub》第 19 期
前言 最近很少写博客了,工作上的事情太多(在做一些数据分析方面的工作,之前是 Web 开发),时间捉襟见肘.更多的时间都花在工作上,没有精力.时间积累整理知识.说来还是能力太差.效率有问题. 后面会好 ...
- 独热编码OneHotEncoder简介
在分类和聚类运算中我们经常计算两个个体之间的距离,对于连续的数字(Numric)这一点不成问题,但是对于名词性(Norminal)的类别,计算距离很难.即使将类别与数字对应,例如{'A','B','C ...
- Re.findall() & Re.finditer()的用法
re.findall(pattern, string, flags=0) Return all non-overlapping matches of pattern in string, as a l ...
- 关于easyui的datagrid属性出现乱码问题
今天遇到这个问题也是纠结了好久,经过在网上各种查询总结,得出以下经验: 1:网页字符集设置为UTF-8: <meta content="charset=UTF-8 " /&g ...