浅析Thinkphp框架中运用phprpc扩展模式
浅析Thinkphp框架中应用phprpc扩展模式
这次的项目舍弃了原来使用Axis2做web服务端的方案,改用phprpc实现,其一是服务端的thinkphp已集成有该模式接口,其二是phprpc传输的数据流相对于普通WebService中的XML或JSON形式的数据量明显减少,而且因为数据量的关系解析速度明显比较快~~
?
说实话,以前还真不知道有phprpc这个协议的,本打算使用sina的api的restlet形式开发,但自己写库的话会花比较多的时间,而现在轻量级的php框架支持rest的貌似只有cakephp,对于已经用tp部署的项目,实在是不情愿,这次偶尔在tp框架官网上徘徊一番~~忽然发现2.1RC版本有个新模式——phprpc。
?
用了才知道,phprpc这东西真的不错~~赞一个
?
但貌似这东西文档和案例比较的匮乏,而且tp框架也没有相应的教程和案例来使用这个模式(官方论坛里貌似也没有具体的使用方法http://bbs.thinkphp.cn/search.php?searchid=156&orderby=lastpost&ascdesc=desc&searchsubmit=yes)~~下面是我探索后写下的一些东西~~
?
首先认识下phprpc协议,具体文档(http://www.phprpc.org/zh_CN/docs/);
进入正题:
?
一、安装phprpc模式
?
?
1、将phprpc模式的文件夹(在官方SDK下的AddOns中,有一个phprpc文件夹和phprpc.php文件)拷到think核心文件下的mode文件夹中。
2、将phprpc的php的SDK拷到think核心文件下的Vendor文件夹中(要重命名为phprpc)
3、在入口文件添加如下代码:
?
define('THINK_MODE','PHPRPC');
? 4、在配置文件中添加如下配置代码:
?
'APP_PHPPRC_ACTIONS'=>'Account,Test,Topic,Timeline,User,Favorites,Follow'
?这里的字符串是要发布为服务的Action,可以多个,用逗号隔开
?
二、编写Action
?
首先来看看这边的phprpc模式到底tp做了什么。以下代码摘自phprpc自带的app.class.php
?
?
Vendor('phpRPC.phprpc_server'); //实例化phprpc $server = new PHPRPC_Server(); $actions = explode(',',C('APP_PHPPRC_ACTIONS')); foreach ($actions as $action){ //$server -> setClass($action.'Action'); $temp = $action.'Action'; $methods = get_class_methods($temp); $server->add($methods,new $temp); } $server->setDebugMode(true); $server->setEnableGZIP(true); $server->start();
?
? 这里导入了vendor里的phprpc核心类,再对每个在配置文件里要求发布的Action进行遍历,使所有的public方法全部发布。
?
在这里(http://bbs.thinkphp.cn/viewthread.php?tid=21593&highlight=phprpc)论坛中提到了在Action中start一个服务端,这其实是行不通的。上面的就是很好的解释,所以在所有的Action 的方法中只要有参数传入和参数return便可以以phprpc协议发布。
实例:
?
class TestAction extends Action{ /** * * 测试欢迎 * @param string $name */ function hello($name) { return 'Hello ' . $name; } }
?
?
三、关于Model not find的问题
?
假使在上述Action中调用M()工厂方法,会出现Model找不到的现象,这个问题搞了我很久,后来被我找到了解决方案在mode文件夹下的phprpc.php文件中加入:
?
THINK_PATH.'/Lib/Think/Core/Model.class.php', // 模型类
?这一配置项,对于视图模型找不到的现象的方法也是如此,下面是修改版的phprpc.php文件
?
return array( THINK_PATH.'/Common/functions.php', // 系统函数库 THINK_PATH.'/Lib/Think/Core/Think.class.php', THINK_PATH.'/Lib/Think/Exception/ThinkException.class.php',// 异常处理 THINK_PATH.'/Lib/Think/Core/Log.class.php',// 日志处理 THINK_PATH.'/Mode/Phprpc/App.class.php', // 应用程序类 THINK_PATH.'/Mode/Phprpc/Action.class.php',// 控制器类 THINK_PATH.'/Lib/Think/Core/Model.class.php', // 模型类 THINK_PATH.'/Lib/Think/Core/Model/ViewModel.class.php', // 视图模型类 THINK_PATH.'/Mode/Phprpc/alias.php', // 加载别名);
?
四、关于Action方法返回问题
?
返回参数统一都是用return;
返回字符串可以用echo;
返回异常可以直接抛出异常throw new Exception('string', 1);
?
?
基本上载tp框架中使用phprpc模式的步骤就是这么几步~~大概等tp的后续版本应该会提供这方面的文档以供学习,也不用我们一点点的摸索了,不过最希望的还是tp能出个restlet模式~~哈哈

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











이번 장에서는 CakePHP의 환경 변수, 일반 구성, 데이터베이스 구성, 이메일 구성에 대해 알아봅니다.

PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

CakePHP는 PHP용 오픈 소스 프레임워크입니다. 이는 애플리케이션을 훨씬 쉽게 개발, 배포 및 유지 관리할 수 있도록 하기 위한 것입니다. CakePHP는 강력하고 이해하기 쉬운 MVC와 유사한 아키텍처를 기반으로 합니다. 모델, 뷰 및 컨트롤러 gu

DJI는 아직 새로운 액션 카메라 출시 계획을 확정하지 않았습니다. 대신 GoPro는 9월 4일에 두 개의 새로운 액션 카메라를 출시할 것이라고 예고하면서 올해 경쟁사보다 앞서 나갈 것으로 보입니다.

VS Code라고도 알려진 Visual Studio Code는 모든 주요 운영 체제에서 사용할 수 있는 무료 소스 코드 편집기 또는 통합 개발 환경(IDE)입니다. 다양한 프로그래밍 언어에 대한 대규모 확장 모음을 통해 VS Code는
