之前总有人问我 Hprose 快,还是 Yar 快。这个问题我之前的回答都是,我没有做过测试,但我觉得 Yar 应该更快一些,毕竟他是鸟哥完全用纯 C 实现的。但这个答案好像并不能让大多数人满意。所以在被多人多次询问之后,昨晚我终于没忍住测试了一下,但是结果所反映出的并不是 Hprose 快,还是 Yar 快的问题。测试结果所能确定的问题只有一个,那就是在 Swoole 下跑的 Hprose 比在 Web 服务器上跑(比如 php-fpm 方式)更快。

下面我们先来列一下测试程序。

公共 API

api.php

define("SEX_UNKNOWN", 0);

define("SEX_MALE", 1);

define("SEX_FEMALE", 2);

define("SEX_INTERSEX", 3);

class User {

var $name;

var $sex;

var $birthday;

var $age;

var $married;

function __constructor() {}

static function newUser($name, $sex, $birthday, $age, $married) {

$user = new self();

$user->name = $name;

$user->sex = $sex;

$user->birthday = $birthday;

$user->age = $age;

$user->married = $married;

return $user;

}

}

class API {

public function hello($name) {

return "hello " . $name . "!";

}

public function getUserList() {

$userlist = array(

User::newUser("Amy", SEX_FEMALE, new DateTime("1983-12-03"), 26, true),

User::newUser("Bob", SEX_MALE, new DateTime("1989-06-12"), 20, false),

User::newUser("Chris", SEX_UNKNOWN, new DateTime("1980-03-08"), 29, true),

User::newUser("Alex", SEX_INTERSEX, new DateTime("1992-06-14"), 17, false)

);

return $userlist;

}

}

Hprose HTTP 服务器和客户端

hprose_server.php

include("Hprose.php");

include("api.php");

$server = new HproseHttpServer();

$server->addInstanceMethods(new API());

$server->start();

hprose_client.php

include("Hprose.php");

$client = new HproseHttpClient("http://127.0.0.1/hprose_server.php");

echo "
";

$t = microtime(true);

for ($i = 0; $i < 10000; $i++) $client->hello("world");

echo microtime(true) - $t;

echo "
";

$t = microtime(true);

for ($i = 0; $i < 10000; $i++) $client->getUserList();

echo microtime(true) - $t;

Yar HTTP 服务器和客户端

yar_server.php

include("api.php");

$service = new Yar_Server(new API());

$service->handle();

yar_client.php

$client = new Yar_Client("http://127.0.0.1/yar_server.php");

echo "
";

$t = microtime(true);

for ($i = 0; $i < 10000; $i++) $client->hello("world");

echo microtime(true) - $t;

echo "
";

$t = microtime(true);

for ($i = 0; $i < 10000; $i++) $client->getUserList();

echo microtime(true) - $t;

Hprose Swoole HTTP 服务器和客户端

hprose_swoole_http_server.php

include("Hprose.php");

include("api.php");

$server = new HproseSwooleServer("http://127.0.0.1:8080/");

$server->addInstanceMethods(new API());

$server->start();

hprose_swoole_http_client.php

include("Hprose.php");

$client = new HproseHttpClient("http://127.0.0.1:8080/");

echo "
";

$t = microtime(true);

for ($i = 0; $i < 10000; $i++) $client->hello("world");

echo microtime(true) - $t;

echo "
";

$t = microtime(true);

for ($i = 0; $i < 10000; $i++) $client->getUserList();

echo microtime(true) - $t;

Hprose Swoole TCP 服务器和客户端

hprose_swoole_tcp_server.php

include("Hprose.php");

include("api.php");

$server = new HproseSwooleServer("tcp://127.0.0.1:2015/");

$server->addInstanceMethods(new API());

$server->start();

hprose_swoole_tcp_client.php

include("Hprose.php");

$client = new HproseSwooleClient("tcp://127.0.0.1:2015");

echo "
";

$t = microtime(true);

for ($i = 0; $i < 10000; $i++) $client->hello("world");

echo microtime(true) - $t;

echo "
";

$t = microtime(true);

for ($i = 0; $i < 10000; $i++) $client->getUserList();

echo microtime(true) - $t;

测试结果

下面是测试结果:

服务器与客户端

hello

getUserList

Hprose Swoole TCP

2.0799078941345秒

3.4906399250031 秒

Hprose Swoole HTTP

2.9583330154419秒

4.2354850769043秒

Yar HTTP

3.8473629951477秒

5.1223559379578秒

Hprose HTTP

4.8670680522919秒

6.5057880878448秒

php yar swoole 比较,Hprose 和 Yar 的性能比较相关推荐

  1. php yar swoole 比较,syar:Swoole 实现的 Yar 服务

    为何用swoole来实现 Yar server 历史代码使用了yar, 不想过多修改客户端代码 提升Yar服务端执行效率 学习swoole, yar(在此感谢laruence,rango及swoole ...

  2. ubuntu 安装yar和使用

    可能你的安装 会出现一些依赖  一般可能是  缺少 m4   autoconf 鸟哥博客:http://www.laruence.com/2012/09/15/2779.html 安装yar 先安装m ...

  3. [Yar] yar安装与使用过程中遇到问题总结

    yar安装与使用过程中遇到问题总结 Yar 简介 官方文档 yar安装 yar运行时的默认配置 yar常量 使用范例 遇到的问题 应用流程 Yar 简介 Yar 是一个轻量级, 高效的RPC框架, 它 ...

  4. php yar 扩展,php的基于yaf+yar+yac环境搭建

    php项目基于yaf+yar+yac环境搭建 具体配置步骤(尽量缩短文字描述): 1.php的yaf扩展安装: **      pecl install   yaf   ** 将   extensio ...

  5. swoole(进程,线程)

    进程 1.进程之间不共享任何状态 2.进程的调度由操作系统完成 3.每个进程都有自己独立的内存空间 4.进程间通讯主要是通过信号传递的方式来实现的,实现方式有多种,信号量.管道.事件等,任何一种方式的 ...

  6. rpc介绍,和PHP常用的rpc框架

    什么是rpc框架 先回答第一个问题:什么是RPC框架? 如果用一句话概括RPC就是:远程调用框架(Remote Procedure Call) 那什么是远程调用? 通常我们调用一个PHP中的方法,比如 ...

  7. php中流行的rpc框架有哪些?

    什么是rpc框架 先回答第一个问题:什么是RPC框架? 如果用一句话概括RPC就是:远程调用框架(Remote Procedure Call) 那什么是远程调用? 通常我们调用一个php中的方法,比如 ...

  8. rpc是什么?php中流行的rpc框架有哪些?

    什么是rpc框架 先回答第一个问题:什么是RPC框架?如果用一句话概括RPC就是:远程调用框架(Remote Procedure Call) 那什么是远程调用? 通常我们调用一个php中的方法,比如这 ...

  9. 中间件 rpc是什么?php中流行的中间件rpc框架有哪些

    rpc是什么?php中流行的rpc框架有哪些. 更好的排版:https://www.zybuluo.com/phper/note/76641 什么是rpc框架 先回答第一个问题:什么是RPC框架? 如 ...

  10. [转]php中流行的rpc框架有哪些?

    什么是rpc框架 先回答第一个问题:什么是RPC框架? 如果用一句话概括RPC就是:远程调用框架(Remote Procedure Call) 那什么是远程调用? 通常我们调用一个php中的方法,比如 ...

最新文章

  1. gcc:undefined reference to 'std::cout'
  2. 楼市调控要“围堵”更要“疏通”
  3. Java中Arrays.toString ()打印二维数组及Array数组的常用操作
  4. iOS经典面试题之深入分析block相关高频面试题
  5. python list长度_python的入门阶段 编程思维100题 我跟罗志祥没关系
  6. Spring.NET 1.3.1 正式版已发布
  7. mysql主键long_MySQL主键设计
  8. android国籍组件,android组件化之路
  9. 【转】java编程思想第20章的注解例子用到的com.sun.mirror的jar包
  10. python中unicode函数_中文字符 unicode转utf-8函数 python实现
  11. python3入门基础语法总结_Python基础语法总结(3)
  12. 7. Document write() 方法
  13. win10设置打开闪退怎么办 电脑windows10设置打开闪退解决方法
  14. 社交网络分析中(SNA)的中心性(centrality) 度中心性(degree),接近中心性(closeness),中介中心性(betweenness)
  15. mysqld.exe 无法找到入口
  16. 数组对象查找某一个对象
  17. c 语言len函数,巧妙利用LEN、SUBSTITUTE函数,计算EXCEL单元格内某重复字符个数
  18. android 高光动画,分享AirDroid高光时刻:它是如何使我高效工作和生活的?
  19. 数据库逻辑设计之 三大范式 及 反范式化 优缺点
  20. [Unity3D]Unity3D游戏开发之粒子系统

热门文章

  1. 显卡对决nbsp;NVIDIAnbsp;GTnbsp;555Mnbsp;VS…
  2. 震网三代(CVE-2017-8464)
  3. MSCD software disk for win vista龙帝国vista 软件光盘合集
  4. struts2拦截器定义
  5. 【ember zigbee】第三章:ug103-02-fundamentals-zigbee 学习笔记(中)
  6. 《惢客创业日记》2021.07.25(周日)当生日遇上套路
  7. C# 通过api 下载sharepoint中的文件
  8. 发布和订阅业务交易事件库(BTE事件及函数)
  9. 计算机出现蓝屏怎么恢复,电脑蓝屏怎么解决,小编教你如何恢复正常
  10. C++使用Socks5协议进行代理上网(四)