0%

Yaf-Yar-Yac

主观能动性是一个哲学概念,亦称“自觉能动性”,它指人的主观意识和实践活动对于客观世界的能动作用。主观能动性有两方面的含义: 一是人们能动地认识客观世界;二是在认识的指导下能动地改造客观世界。在实践的基础上使二者统一起来,即表现出人区别于物的主观能动性。能动性是指对外界或内部的刺激或影响作出积极的、有选择的反应或回答。人的能动性与无机物、有机生命体、高等动物的能动性有别,称为主观能动性,其特点是通过思维与实践的结合,自觉地、有目的地、有计划地反作用于客观世界。

一、概念

  1. Yaf,全称Yet Another Framework,一个C语言编写的以PHP扩展形式提供高性能的PHP开发框架,它更快,更轻便,提供了Bootstrap,路由,分发,视图,插件等,是一个全功能的PHP框架。
  2. Yar,全称Yet Another RPC Framework,一个C语言编写的PHP扩展的RPC框架,它轻量级,可并行化,支持多种打包协议(msgpack,json,php)。
  3. Yac,全称Yet Another Cache,一个一个基于共享内存的高性能的缓存扩展。

二、安装

      本身就是以扩展的形式存在,和其他扩展安装没什么区别,自己gg一下就出来了。在php命令行下可通过命令php --ri extension_name获得扩展相关信息

  1. yaf配置信息

    • yaf.environ:环境名称,当用INI作为Yaf的配置文件时,这个指明了Yaf将要在INI配置中读取的节的名字,默认product。
    • yaf.library:全局类库的目录路径,默认NULL
    • yaf.cache_config:是否缓存配置文件(只针对INI配置文件生效),打开此选项可在复杂配置的情况下提高性能,默认0。
    • yaf.name_suffix:在处理Controller/Action/Plugin/Model的时候,类名中关键信息是否是后缀式,比如UserModel,而在前缀模式下则是ModelUser,默认1。
    • yaf.name_separator:在处理Controller,Action,Plugin,Model的时候,前缀和名字之间的分隔符,默认为空,也就是UserPlugin,加入设置为”_”,则判断的依据就会变成:”User_Plugin”,这个主要是为了兼容ST已有的命名规范,默认””。
    • yaf.forward_limit:forward最大嵌套深度,默认5。
    • yaf.use_namespace:开启的情况下,Yaf将会使用命名空间方式注册自己的类,比如Yaf_Application将会变成Yaf\Application,默认0。
    • yaf.use_spl_autoload:开启的情况下,Yaf在加载不成功的情况下,会继续让PHP的自动加载函数加载,从性能考虑,除非特殊情况,否则保持这个选项关闭,默认0。
  2. yar配置信息

    • yar.packager string:设置Yar的打包工具,可以是PHP(serialize),JSON,Msgpack(这个需要编译的时候指定–enable-msgpack).
    • yar.debug string:打开的时候,Yar会把请求过程的日志都打印出来(到stderr).
    • yar.connect_timeout integer:连接超时(毫秒为单位)
    • yar.timeout integer:处理超时(毫秒为单位)
    • yar.expose_info bool:如果关闭,则当通过浏览器访问Server的时候,不会出现Server Info信息.
  3. yac配置信息

    • yac.enable = 1
    • yac.keys_memory_size = 4M ; 4M can get 30K key slots,32M can get 100K key slots
    • yac.values_memory_size = 64M
    • yac.compress_threshold = -1
    • yac.enable_cli = 0 ; whether enable yac with cli,default 0

四、使用

  1. Yaf
  2. Yar
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
//filename operator.php
class Operator
{
public function add($a, $b) {
sleep(20);
return $this->_add($a, $b);
}

public function sub($a, $b) {
sleep(10);
return $a - $b;
}

public function mul($a, $b) {
sleep(5);
return $a * $b;
}

protected function _add($a, $b) {
return $a + $b;
}
}

$server = new Yar_Server(new Operator());
$server->handle();

方式一:传统调用方式:http://localhost/operator.php

//filename client.php

方式二:实例化new yar_client对象然后调用
$client = new yar_client("http://localhost/operator.php");
var_dump($client->add(1, 2));
var_dump($client->call("add", array(3, 2)));
var_dump($client->_add(1, 2));

方式三:回调
ini_set("yar.debug", false);
$client = new yar_client("http://localhost/operator.php");

function callback($ret, $callinfo) {
print_r($ret);
echo PHP_EOL;

print_r($callinfo);
echo PHP_EOL;
}

Yar_Concurrent_Client::call("http://localhost/operator.php", "add", array(1, 2), "callback");
Yar_Concurrent_Client::call("http://localhost/operator.php", "sub", array(2, 1), "callback");
Yar_Concurrent_Client::call("http://localhost/operator.php", "mul", array(2, 2), "callback");

echo 123;

Yar_Concurrent_Client::loop();

echo 456;
  1. Yac
1
2
3
4
5
6
7
8
$yac  = new Yac();
$info = $yac->info();
$set1 = $yac->set("foo", "bar");
$get1 = $yac->get('foo');

$set2 = $yac->set(["key1" => "val1","key2" => "val2"]);
$get2 = $yac->get("key1");
$get3 = $yac->get(array("key1", "key2"));

三、参考

  1. Yaf
  2. Yar
  3. Yac
  4. Yac
  5. Yaf配置