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

article/2025/9/26 6:29:49

yar安装与使用过程中遇到问题总结

  • Yar 简介
    • 官方文档
    • yar安装
    • yar运行时的默认配置
    • yar常量
    • 使用范例
    • 遇到的问题
    • 应用流程

Yar 简介

Yar 是一个轻量级, 高效的RPC框架, 它提供了一种简单方法来让PHP项目之间可以互相远程调用对方的本地方法. 并且Yar也提供了并行调用的能力. 可以支持同时调用多个远程服务的方法.

官方文档

yar官方文档地址点击查看。
github源码查看

yar安装

这里介绍两种基本安装方法
方法一:
Yar是PECL扩展,因此您可以通过以下方式简单地安装它:

pecl install yar

方法二:
编译安装:

wget -c http://pecl.php.net/get/yar-2.0.4.tgz
$/path/to/phpize
$./configure --with-php-config=/path/to/php-config/
$make && make install
在php.ini 里添加如下内容.
extension=yar.so

安装完成后

执行php -m 就可以查看到了

结果查看

yar运行时的默认配置

yar.timeout //默认5000(ms)
yar.connect_timeout //默认1000(ms)
yar.packager //默认“php”,当使用--enable-msgpack构建然后默认为“msgpack”时,它应该是“php”,“json”,“msgpack”之一
yar.debug //默认关闭
yar.expose_info //默认开,是否输出GET请求的API信息
yar.content_type //默认“application / octet-stream”
yar.allow_persistent //默认关闭

注意 yar.connect_time是一个以毫秒为单位的值,在1.2.1及之前以秒为单位进行测量。

yar常量

YAR_VERSION
YAR_OPT_PACKAGER
YAR_OPT_PERSISTENT
YAR_OPT_TIMEOUT
YAR_OPT_CONNECT_TIMEOUT
YAR_OPT_HEADER //从2.0.4开始

使用范例

基本方法

Yar_Server //The Yar_Server class
Yar_Server::__construct() //创建一个HTTP RPC Server
Yar_Server::handle() //启动HTTP RPC ServerYar_Client  //The Yar_Client class
Yar_Client::__call()  //调用远程服务
Yar_Client::__construct()  //创建一个客户端实例
Yar_Client::setOpt() //设置调用的配置
eg:
//Set timeout to 1s
$client->SetOpt(YAR_OPT_CONNECT_TIMEOUT, 1000);//Set packager to JSON
$client->SetOpt(YAR_OPT_PACKAGER, "json");Yar_Concurrent_Client  //The Yar_Concurrent_Client class
Yar_Concurrent_Client::call() //注册一个并行的服务调用
Yar_Concurrent_Client::loop() //发送所有注册的并行调用
Yar_Concurrent_Client::reset() //Clean all registered calls
eg:
Yar_Concurrent_Client::call("http://host/api/", "some_method", array("parameters"), "callback");
Yar_Concurrent_Client::call("http://host/api/", "some_method", array("parameters"));   // if the callback is not specificed, // callback in loop will be used
Yar_Concurrent_Client::call("http://host/api/", "some_method", array("parameters"), "callback", NULL, array(YAR_OPT_PACKAGER => "json"));//this server accept json packager
Yar_Concurrent_Client::call("http://host/api/", "some_method", array("parameters"), "callback", NULL, array(YAR_OPT_TIMEOUT=>1));//custom timeout Yar_Concurrent_Client::loop("callback", "error_callback"); //send the requests, //the error_callback is optionalYar_Server_Exception //The Yar_Server_Exception class
Yar_Server_Exception::getType() //获取异常的原始类型Yar_Client_Exception  //The Yar_Client_Exception class
Yar_Client_Exception::getType() //The getType purpose

具体使用方法可以参考这篇文章点击查看

遇到的问题

  • 超时问题
    yar RPC请求默认超时设置为 5s,因此在客户端任务请求时,若果5s内没有得到响应,请求会持续5s

修改超时时间有两种方式 (时间单位:毫秒)
1.采用ini_set()方法实现对php.ini的动态修改
ini_set("yar.timeout",60000);
2.在yar注册服务方法种进行修改
Yar_Concurrent_Client::call(“http://localhost“, “some_method”, array(“parameters”), “callback”, NULL, array(YAR_OPT_TIMEOUT=>1));
自己测试超时时间设置为低于200毫秒时,有一定机率出现请求失败。

  • 多次请求问题

在用到多次并发请求时,后续请求的结果会包含上一次请求的数据
调用Yar_Concurrent_Client::Reset()清空第一次的请求结果,要求yar版本>=1.2.4

应用流程

简单流程图描述:

浏览器
服务器 client
yar服务端 Server
服务器yar统一请求入口
解析路由注册yarServer端
调用yar客户端
请求服务端

http://chatgpt.dhexx.cn/article/4tAxSdnD.shtml

相关文章

PHP封装curd,ThinkPHP5.0的模型CURD创建Create操作

模型的主要功能包括数据处理和业务逻辑,而这些都离不开数据的CURD操作,因此我们首先来谈下数据的CURD操作,在掌握了数据库Db类的用法后,模型的CURD操作就会很容易理解,因为本质上模型的CURD操作最终调用的还是Db类的操…

浅谈CURD系统和CRQS系统

浅谈CURD系统和CRQS系统 在网上看到关于这个内容的介绍,就想着自己整理一下,方便观看。 三层架构 先从三层架构开始讲,三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:界面层(User Interface layer)、业务逻辑…

Vue入门之Web端CURD前端项目示例

Vue入门之Web端CURD前端项目示例 随着vue.js越来越火,很多不太懂前端的小伙伴想要入坑。而入坑最好的办法就是上手实际操作,因此本文将重点放在实际操作上,对理论不做过多解释,不明白的地方小伙伴们可以去看官方文档或者相关书籍…

fastadmin一键生成CURD

1.登录后台以后安装在线命令插件 2.CRUD fastadmin自带一个test表可以用来测试,或者是自己在数据库随便新建一个表也行 自定义模块名这样填的话就是在admin->controller下->新建一个名为test文件夹 只写test的话是在 controller 目录下面 然后点击生成命令行…

php跨域curd,SpringBoot+Vue前后端分离(CURD)Demo

我发现我好久没有更新了,写一篇证明我还活着。 既然是前后端分离的话,肯定是要有前端和后端的。 这里前端我使用的VueElementUI,后端采用的是SpringBootMybatisSwagger2。 下面的话,我就做一个简单的Demo吧。 写的不好,请大家各位…

单表CURD操作

该项目纯粹用 Servlet 编写,理解跳转过程。理解原理..... 一、准备数据库脚本 USE test;DROP TABLE IF EXISTS dept;CREATE TABLE dept (deptno int(2) NOT NULL,dname varchar(14) DEFAULT NULL,loc varchar(13) DEFAULT NULL,PRIMARY KEY (DEPTNO) ) ENGINEInnoD…

Avue-curd个性化定制

在使用vue(js)elelment(ui)开发一些后台管理项目的时候,基本会用到 列表页,条件搜索(search),表格数据(table),分页,操作栏的,增、删、改、查几种操作。如下图这样的: 很多的页面都很类似,这里就给大家介绍…

Python简单CURD

python Python的注释模块 python变量 格式化输出 转义字符 与 数据类型 控制台输入 实体类 Student.dy class Emp:def __init__(self,id,name,age,sex,sal):self.id idself.name nameself.age ageself.sex sexself.sal saldef __str__(self):return "学号&#xf…

MySQL常用语句(CURD)

文章目录 一、数据库定义语言(DDL)1.1 库操作1.2 表操作 二、数据库操纵语言(DML)2.1 插入 insert2.2 修改 update2.3 删除 delete 三、数据库查询语言(DQL)3.1 单表查询①查询:select②条件&am…

SpringBoot实现CURD

SpringBoot实现CURD 项目列表 Pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http:/…

thinkphp curd 列表关联展现方式分享

在维护自己的开源框架中&#xff0c;针对后台列表模板&#xff0c;有时候我们需要在一键CURD的情况下&#xff0c;进行多个字段的关联显示&#xff0c;比如用户订单表里面存在user_id字段&#xff0c;那么在显示的时候&#xff0c;我们期望显示出用户的名称&#xff0c;而不是用…

mysql curd_mysql 基础之CURD

原文:mysql 基础之CURD 增删改查基本语法学习 增: insert Insert 3问: 1: 插入哪张表? 2: 插入哪几列? 3: 这几列分别插入什么值? Insert into TableName (列1,列2....列n) Values (值1,值2,....值n) 值 与 列,按顺序,一一对应 特殊: insert语句 允不允许不写列名 答:允许. …

小白入门:什么是CURD?

CRUD是CREATE、READ、UPDATE和DELETE的首字母缩写词&#xff0c;在数据库操作中频繁出现&#xff0c;本文针对小白&#xff0c;如果你已经是开发人员或者对数据库有一定认识的工程师可以默默离开了。让我直接走进CURD的世界。 为什么 CRUD 如此重要&#xff1f; CRUD 经常用于…

大龄焦虑?如何看待程序员35岁职业危机?

往期精选&#xff08;欢迎转发~~&#xff09; Java全套学习资料&#xff08;14W字&#xff09;&#xff0c;耗时半年整理 消息队列&#xff1a;从选型到原理&#xff0c;一文带你全部掌握 肝了一个月的ETCD&#xff0c;从Raft原理到实践 我肝了三个月&#xff0c;为你写出了…

Sitemesh前段框架基础

用sitemesh框架解决项目统一布局的解决方案 Sitemesh装饰框架 Sitemesh项目简介&#xff1a; Sitemesh是一个用来在jsp中实现页面布局和装饰&#xff08;layout and decoration&#xff09;的框架组件&#xff0c;能够帮助网站开发人员较容易实现页面中动态和静态装饰外观的分…

Sitemesh Demo

简介 sitemesh是一个网页布局与装饰体系,主要应用于创建具有大量一致性用户界面、导航与布局框架的站点。sitemesh拦截一切经过web server的静态或动态生成的HTML页面请求,处理页面内容,并将其与一个或多个装饰页面进行融合,生成最终页面。sitemesh也可用于构建由多个部分小…

spring集成sitemesh3

1、SiteMesh是什么&#xff1f; SiteMesh是一个网页布局和修饰的框架&#xff0c;利用它可以将网页的内容和页面结构分离&#xff0c;以达到页面结构共享的目的。 SiteMesh是基于Servlet的filter&#xff0c;通过截取response&#xff0c;并进行装饰后再交付给客户。 2、SiteMe…

sitemesh框架的简单使用(springboot+maven+jsp+sitemesh)

一 简单介绍 sitemesh是一种模板框架&#xff0c;是为了解决页面重复代码而设计的sitemesh的设计思想是装饰者设计模式 二 简单使用 目录结构&#xff0c;因为我这个项目本来是用来学习flowable的&#xff0c;后面为了方便快速学习&#xff0c;直接把sitemesh集成到这里了&a…

SiteMesh3简介及使用

最近项目用到SiteMesh3&#xff0c;研究学习一段时间后决定写篇博文来记录收获。 SiteMesh SiteMesh 介绍工作原理配置及使用 下载1添加maven依赖2webxml中添加SiteMesh过滤器3创建一个装饰页面decorator page4创建一个被装饰页面content page5配置 1XML方式1Java方式 6查看…

sitemesh初步

sitemesh小项目 1.工程目录 2.需要的lib:sitemesh-2.4.2.jar http://wiki.sitemesh.org/wiki/display/sitemesh/Download 3.配置 decorators.xml[sitemesh的配置文件] <?xml version"1.0" encoding"ISO-8859-1"?><!-- 在defaultdir目录…