webservice与接口开发以及phprpc,构建php服务器

一、什么是webservice:
Webservice的一个最基本的目的就是提供在各个不同平台的不同应用系统的协同工作能力。
"网络服务"(Web Service)的本质,就是通过网络调用其他网站的资源。
其实WebService并不是什么神秘的东西,它就是一个可以远程调用的类,或者说是组件,他包括服务端(server)和客户端(client)


我们认为下一代互联网软件将建立在Web service(也就是"云")的基础上。


想要理解Web service,必须先理解什么是Service(服务)
  根据来源的不同,"服务"又可以分成两种:一种是"本地服务"(使用同一台机器提供的服务,不需要网络)。
  另一种是"网络服务"(使用另一台计算机提供的服务,必须通过网络才能完成)。


比如:一件事你可以自己做,(这就是本地服务)也可以交给另一个人去做,做完成后使用。(网络服务);。肚子饿了,你可以自己做饭,也可以打电话去订一份比萨,让店家替你做好送上门。


在比如:我现在有一批图片,需要把它们的大小缩小一半。那么,我们可以把"缩放图片"看成是一种服务。你可以使用"本地服务",在自己计算机上用软件缩小图片,也可以使用"网络服务",将图片上传到某个网站,让服务器替你缩小图片,完成后再通过网络送回给你。






二、Web Service架构和云
如果一个软件的主要部分采用了"网络服务",即它把存储或计算环节"外包"给其他网站了,那么我们就说这个软件属于Web Service架构。


Web Service架构的基本思想,就是尽量把非核心功能交给其他人去做,自己全力开发核心功能。比如,如果你要开发一个相册软件,完全可以使用Flickr的网络服务,把相片都储存到它上面,你只要全力做好相册本身就可以了。总体上看,凡是不属于你核心竞争力的功能,都应该把它"外包"出去。


最近很红的"云计算"(cloud computing)或者"云服务"(cloud services),实际上就是Web Service的同义词,不过更形象一些罢了。它们不说你把事情交给其他计算机去做,而说你把事情交给"云"去做。


三、Web Service的优势
Web Service还有以下的优越性:
* 平台无关。不管你使用什么平台,都可以使用Web service。
* 编程语言无关。只要遵守相关协议,就可以使用任意编程语言,向其他网站要求Web service。这大大增加了web service的适用性,降低了对程序员的要求。
* 对于Web service提供者来说,部署、升级和维护Web service都非常单纯,不需要考虑客户端兼容问题,而且一次性就能完成。
* 对于Web service使用者来说,可以轻易实现多种数据、多种服务的聚合(mashup),因此能够做出一些以前根本无法想像的事情。


四、php中四种webservice:
  常见的php中的webservice 有四种: 1--PHP本身的SOAP, 2--开源的NUSOAP,3--商业版的PHPRPC 4--使用二进制传输数据流的HessianPHP


  phprpc: 面向服务的高性能远程过程调用协议。


五、phprpc特点:
  轻量级:PHPRPC 与 SOAP 相比,虽然 SOAP 号称是简单对象存取协议,但是实际上它一点都不简单,甚至可以说,它的协议内容是一般人所无法理解
  安全:在安全方面,绝对是从众多的安全加密机制中精选出来的。它可以保证你的数据在非加密的 HTTP 网络4上安全传输
  跨网际: PHPRPC 是工作于 HTTP 协议之上的远程调用协议
  跨语言、跨平台、跨环境:PHPRPC 目前支持十几种编程语言,而且这些支持的编程语言都是目前被广泛使用的主流编程语言。这些语言支持不同的平台与环境,因此在跨语言的同时,也实现了跨平台,跨环境。而且随着 PHPRPC 的发展,你将发现 PHPRPC 会支持更多的语言,包括你所见过、使用过,以及从来没有听说过的语言。


 跨域:支持在浏览器环境中直接跨域调用。而且在跨域方面,它还针对不同的应用作了不同的实现。


 复杂对象传输:


 内容输出重定向:


 引用参数传递:


 分级错误处理:


 会话支持:


六、使用phprpc:
  
  下载: http://www.phprpc.org/zh_CN/download/


   安装:  http://www.phprpc.org/zh_CN/docs/


   使用:
 
第一个应用案例:
server.php  服务器端
<?php
//加载文件
include ("../service/phprpc_server.php"); 
//自定义服务器端方法
function HelloWorld() {  
    return 'Hello World!';  
}
//实例化
$server = new PHPRPC_Server(); 
//添加方法 
$server->add('HelloWorld');
//启动服务器  
$server->start();
?> 
  
client.php  客户端
<?php 
include ("../client/phprpc_client.php");  
$client = new PHPRPC_Client('http://127.0.0.1/phpRpc/pro/server.php');  //调用服务器脚本
echo $client->HelloWorld(); //调用服务器提供的方法
?>


第二个应用案例-传递参数
server.php 服务器
<?php  
include ("../service/phprpc_server.php"); 
function hello($name) {  
    return 'Hello ' . $name;  
}  
$server = new PHPRPC_Server();  
$server->add(array('hello', 'md5', 'sha1'));  
$server->add('trim');  
$server->start();  
?> 
clint.php 客户端
<?php
include ("../client/phprpc_client.php");  //加载文件
$client = new PHPRPC_Client('http://127.0.0.1/phpRpc/pro2/server.php'); //创建客户端 并连接服务端文件
echo$client->Hello("cdEduask"); //调用方法 返回 hello cdeduask
?> 




第三个应用案例--与数据库的应用
server.php 服务器端
<?php
include ("../service/phprpc_server.php"); 
//检查登录 
function islogin($u,$p){  
    $con = mysql_connect('localhost','root','test123') or die('数据库连接失败');  
    mysql_select_db('mytest');
    mysql_set_charset("utf8");
    //$p = md5($p);
    $sql = "select * from mytest_user where `u_name`= '$u' and `u_pwd` ='$p'";
    //file_put_contents('log.txt',$sql);  
    $result = mysql_query($sql);
    $n = mysql_num_rows($result);
    if ($n > 0){
        return true;
    }else{
        return false;
    }
 }


//登录
function login($u,$p){
    if(islogin($u,$p)){
        return true;
    }else{  
        return false;
    }  



$server = new PHPRPC_Server();  
$server->add('login');//添加允许远程访问的方法   
$server->start();//开始
?> 


client.php  客户端
<?php
header("content-type: text/html; charset=utf-8");
include ("../client/phprpc_client.php");  //加载文件
$client = new PHPRPC_Client('http://127.0.0.1/phpRpc/pro3/server.php');//在这里填上服务端的允许远程访问的方法,下面就可以像调用本地方法一样,进行使用了  
if($client->login('sssss','dfddd')){  
    echo "登录成功!";  
}  
else{  
    echo "登录失败";  
}
?>


第四个应用案例---sso 单点登录---了解并理解单点登录的机制过程。


所谓的单点登录(SSO):
     就是用户只需要在用户中心服务器登录认证一次,然后浏览器通过用户中心服务器返回的信息轮询访问应用程序进行模拟登录,之后用户再访问应用系统的时候不需要登录就能访问了。discuz的ucenter就是此原理。


其实现原理就是浏览器(用phprpc for javascript)请求用户中心服务器(phprpc for php),通常此时的浏览器就是一个登录页面,浏览器将用户名和密码传递给用户中心服务器,用户中心服务器验证成功之后,查找数据库里此用户名和密码对应的信息,根据这些信息生成一个令牌(token)返回给浏览器,浏览器在用token访问应用系统,应用程序收到token之后,再用收到的token访问用户中心服务器,用户中心服务器通过这个token查找数据库,从而能够找到对应应用系统的用户名和密码,然后将这个用户名和密码返回给应用系统,应用系统再收到的用户名和密码进行登录(通常就是一次写SESSION或者COOKIE的过程


下面我们来了解(php for javascript):
    
  下载:http://www.phprpc.org/zh_CN/download/
   安装: <script type="text/javascript" src="scripts/phprpc_client.js"></script>  
        上面这句,你可以放在 head 中,也可以放在 body 中,只要放在你创建 PHPRPC_Client 对象之前就可以了


  在客户端的使用:
<script type="text/javascript">
  var client = new PHPRPC_Client('http://localhost/index.php', ['add', 'sub']);    //add  sub 是客户端注册的方法名称,同时也是服务器的方法名称
  client.setKeyLength(256);   //设置密钥长度
  client.setEncryptMode(2);  //用于设置加密模式
  //client.add 和 client.sub 这两个调用实际上调用的就是远程方法,对于 JavaScript 客户端来说,远程方法名虽然可以不事先声明.
  client.add(1, 2, function (result, args, output, warning) {  
    alert(result);  
});  
  client.sub(1, 2, function (result, args, output, warning) {  
    alert(result);  
});


回调函数有四个参数,你可以认为它们是服务器端方法执行之后返回的内容。


第一个参数 result 是服务器端方法(函数)的返回值,它可以是任意类型。


第二个参数 args 是方法调用的参数,如果这个调用是一个引用参数传递的调用,参数也有可能被修改,这时候,你可以通过 args 来获得修改后的参数,关于引用参数传递的调用我们后面会做进一步说明。


第三个参数 output 是服务器端输出的内容,它是字符串类型的。


第四个参数 warning 是服务器端发生的警告错误(目前只有 PHP 服务器会产生警告错误),一般只调试过程中可能会用到。


</script>




下面我们就来完成单点登录的的过程:


index.php---这是任何一个应用程序的入口文件,在这个入口文件中我们通过sesssion判断用户是否有登录,如果登录了那么就输出session中的用户,否则就让用户登录。


<?php




?>
























  
      

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值