yar

PHP7的Yaconf使用教程

和自甴很熟 提交于 2020-05-06 09:21:42
简介 首先说说, 这个是干啥的. 我见过很多的项目中, 用PHP文件做配置的, 一个config目录下可能有十几个甚至数十个.php配置文件, 里面都是各种各样的array, 还有甚者会把一些词典文件(比如中文/英文对照)也放到配置中去. 这就导致配置文件的解析耗费了很大的性能(诚然, 用了opcache能好点, 但是实际上还是有执行的过程). 除了PHP的, 还有用json的, yaml的, 一个共同的特点就是这些配置的可读性比较差. 另外, 他们也都要runtime解析. config目录往往和代码在一起, 首先会有安全隐患(配置中往往有敏感信息), 其次如果配置和代码属于一个项目, 这就会导致配置的修改也要走代码上线的流程. 一些资源配置文件, 比如mysql/memcache的配置信息, 这些内容本来是应该对开发透明的, 运维直接负责即可. 但是放到了代码中就会导致, 运维如果要发起一些变更, 也要开发配合修改配置文件上线. 所以, Yaconf就是为了解决这些问题而生的一个工具. 它使用单独的一个配置目录(在yaconf.directory指定), 不和代码在一起. 它在PHP启动的时候, 处理所有的要处理的配置, 然后这些配置就会常驻内存, 随着PHP的生命周期存亡. 避免了每次请求的时候解析配置文件. 所有的配置内容都是immutable的,

php扩展之Yar使用

筅森魡賤 提交于 2020-04-07 17:07:37
Yar 是一个轻量级, 高效的 RPC 框架, 它提供了一种简单方法来让PHP项目之间可以互相远程调用对方的本地方法. 并且Yar也提供了并行调用的能力. 可以支持同时调用多个远程服务的方法. 有个业务场景,需要本地项目去调用一个服务层的相关方法实现相应的功能,一般情况,可以通过普通的http的方式进行请求即可,但是如果只是这个服务是内部使用,那么可以使用rpc的方式进行替代.好处自不必多说,基于tcp传输,支持并发结合在项目中使用。 首先介绍服务端:RpcServer.php <?php namespace app\index\logic; /** * rpc基类(服务端) */ class RpcServer { private static $signs = [ 'sign1', //不同的来源Salt不同 'sign2', ]; // 验证签名 protected function checkSign($params,$sign) { if(empty($sign)){ return false; } ksort($params); $signStr = ''; foreach($params as $key => $val) { if(empty($val) || $val == $sign) continue; $signStr .= $key.'='.$val.'&'

linux下安装msgpack,yar,phalcon

醉酒当歌 提交于 2020-04-03 09:09:49
安装msgpack扩展 下载: http://pecl.php.net/package/msgpack cd /usr/local tar zxvf msgpack-0.5.5.tgz cd msgpack-0.5.5 phpize ./configure --with-php-config=/usr/local/php5/bin/php-config make && make install 会在no-debug-non-zts-20090626中生成msgpack.so 在php.ini中加入extension=/usr/local/php5/lib/php/extensions/no-debug-non-zts-20090626/msgback.so 安装yar扩展 下载:http://pecl.php.net/package-stats.php cd /usr/local tar zxvf yar-1.2.4.tgz cd yar-1.2.4 phpize ./configure --with-php-config=/usr/local/php5/bin/php-config make && make install 会在no-debug-non-zts-20090626中生成yar.so 在php.ini中加入extension=/usr/local/php5/lib

B站直播:使用Golang重构,流量最大的推送功能

随声附和 提交于 2020-01-07 17:51:29
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1 悲剧直播推送功能 1.1 B站直播推送功能的困境 B站直播有个推送功能,就是这里,看到那个红色的数字没有,显示你关注的主播开播人数。 然后每个进入B站的用户,不管是不是直播的观众、不管进入B站哪个页面、不管你要干啥,都要请求一次这个人数接口,直播服务表示:妈逼,就给老子几台土豆服务器,却要扛着跟主站一样PV, 不仅仅是主站在使用这个功能,还有直播服务内部的各种推送心跳同样在使用这个功能,流量很大。 由于主站、直播对于UP主和主播关注是混在一起的,所以每次直播这边都要从一堆用户关注UP主中找到直播的主播,并且还要找到那个主播在直播,老的做法就是从缓存读各种数据,然后遍历,计算,然后输出,对缓存服务器、PHP服务器都造成了极大的压力,然后遇到大的活动,服务器分分钟都是:老子不想干了的节奏。然后大的活动每次都会把推送能关掉,来保证活动正常进行。 1.2 穷则思变的重构 你们以为大佬们一开始就同意我的Golang重构方案吗?你们啊 我苦口婆心的跟大佬们诉说我的方案是多么适合这个业务,然后我Golang技术有多好(无耻笑)、多靠谱,加上在弹幕服务器部门做了一段时间Golang的兼职(没错,是我舔着脸要去的),做了些大流量的功能,他们终于同意了,呵呵,是时候展示真正的技术了(请脑补小黄毛EZ配音)。 1.3

php中流行的rpc框架详解

白昼怎懂夜的黑 提交于 2019-12-26 21:46:00
什么是RPC框架? 如果用一句话概括RPC就是:远程调用框架(Remote Procedure Call) 那什么是远程调用? 我的官方群 点击此处 。 通常我们调用一个php中的方法,比如这样一个函数方法: localAdd(10, 20),localAdd方法的具体实现要么是用户自己定义的,要么是php库函数中自带的,也就说在localAdd方法的代码实现在本地,它是一个本地调用!远程调用意思就是:被调用方法的具体实现不在程序运行本地,而是在别的某个远程地方。 远程调用原理 比如 A (client) 调用 B (server) 提供的remoteAdd方法: 首先A与B之间建立一个TCP连接; 然后A把需要调用的方法名(这里是remoteAdd)以及方法参数(10, 20)序列化成字节流发送出去; B接受A发送过来的字节流,然后反序列化得到目标方法名,方法参数,接着执行相应的方法调用(可能是localAdd)并把结果30返回; A接受远程调用结果,输出30。 RPC框架就是把我刚才说的这几点些细节给封装起来,给用户暴露简单友好的API使用。 远程调用的好处 解耦:当server需要对方法内实现修改时,client完全感知不到,不用做任何变更;这种方式在跨部门,跨公司合作的时候经常用到,并且方法的提供者我们通常称为:服务的暴露。 RPC与Socket有什么区别?

thinkphp rpc

眉间皱痕 提交于 2019-12-04 08:50:08
RPC (Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。 RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息的到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。 ThinkPHP支持广泛的RPC协议,包括PHPRPC、HPRose、JsonRPC以及Yar。 PHPRPC支持 PHPRPC 是一个轻型的、安全的、跨网际的、跨语言的、跨平台的、跨环境的、跨域的、支持复杂对象传输的、支持引用参数传递的、支持内容输出重定向的、支持分级错误处理的、支持会话的、面向服务的高性能远程过程调用协议。目前该协议的最新版本为 3.0。详细的资料可以参考phprpc官网( http://www.phprpc.org/zh_CN/)