php yar swoole 比较,Hprose 和 Yar 的性能比较

news/2025/2/25 18:45:33

之前总有人问我 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秒


http://www.niftyadmin.cn/n/712192.html

相关文章

C#编程的安全性

安全性&#xff08;C# 编程指南&#xff09; Visual Studio 2005安全是每个 C# 应用程序的一个非常重要的方面&#xff0c;在每个开发阶段都必须考虑&#xff1a;而不仅仅是在完成设计和实现后才需要考虑。 特定于 C# 的安全建议 本列表并未列出所有潜在的安全问题。它强调 C# …

web前端学习(三十二)——JavaScript语法、语句输出及注释的相关设置

1.JS语句 JavaScript 语句向浏览器发出的命令。语句的作用是告诉浏览器该做什么。 JavaScript 是脚本语言&#xff0c;浏览器会在读取代码时&#xff0c;逐行地执行脚本代码。而对于传统编程来说&#xff0c;会在执行前对所有代码进行编译。 分号用于分隔 JavaScript 语句&…

php 模拟返回400,用php模拟登陆报400错,是什么原因

各位达人&#xff1a;我用php爬虫模拟登陆&#xff0c;在不加headers的时候报405错&#xff0c;加上headers报400错&#xff0c;能否指点下解决思路&#xff0c;万分感谢&#xff01;&#xff01;用的代码如下&#xff1a;// 要访问的目标页面// ***服务器define("PROXY_S…

[数据结构]归并排序

2019独角兽企业重金招聘Python工程师标准>>> 归并排序 简述 归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 其对数组进行排序时的基本操作在于两个有序序列进行合并操作。其代码部…

rec删除xposed_刷机,twrp,安装xposed

首先明白几个名词&#xff1a;recovery模式&#xff0c;类似于pc端的PE系统&#xff0c;每个手机都有自带的rec&#xff0c;但不好用&#xff0c;最好自己刷一个&#xff0c;现在市面最好用的是twrpfastboot模式&#xff0c;比recovery更底层&#xff0c;进入fastboot可以刷第三…

matlab中nntool,matlab nntool

输入【1.00 0.34 0.63 0.5 0.64 0.49 0.520.19 0.18 0.06 1 0.14 0.04 0.180.94 0.00 0.14 0.5 0.19 0.17 1.000.13 …

web前端学习(三十三)——JavaScript变量、数据类型的相关设置

1.JS变量 与代数一样&#xff0c;JavaScript 变量可用于存放值&#xff08;比如 x5&#xff09;和表达式&#xff08;比如 zxy&#xff09;。变量是用于存储信息的"容器"。 变量可以使用短名称&#xff08;比如 x 和 y&#xff09;&#xff0c;也可以使用描述性更好的…

rsa 公 填充模式的_RSA中pkcs1的填充方法具体是什么?

展开全部1)RSA_PKCS1_PADDING 填充模式&#xff0c;最常用的模式要求:输入 必须32313133353236313431303231363533e4b893e5b19e31333262353433 比 RSA 钥模长(modulus) 短至少11个字节, 也就是 RSA_size(rsa) – 11如果输入的明文过长&#xff0c;必须切割&#xff0c; 然后填充…