博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
15.4. Service-oriented architecture (SOA)
阅读量:6845 次
发布时间:2019-06-26

本文共 2930 字,大约阅读时间需要 9 分钟。

SOA.png

SOA 与 REST很多相同之处,目前SOA主要是基于SOAP实现,也有基于MQ的实现。而REST只限于HTTP POST/GET/PUT/DELETE等等。

我个人比较喜欢机遇TCP的SOA实现,不喜欢SOAP大量XML传输。

15.4.1. SOAP实现

这里提供一个简单的机遇SOAP实现的SOA框架

index.php入口文件

",$class);}if (class_exists($class)) { $server = new SoapServer(null, array('uri' => "http://webservice.example.com")); $server->setClass($class); $server->handle();}else{ die('Object isnot exist.');}

接口文件

dbh = new Database('slave'); } public function getAllByUsernameAndMobile($username,$mobile){ $result = array(); if(empty($username) or empty($mobile)){ return($result); } $sql = "SELECT username, chinese_name, sex FROM members m, members_digest md WHERE m.id = md.id and m.username= :username and md.mobile = md5( :mobile );"; $stmt = $this->dbh->prepare($sql); $stmt->bindValue(':username', $username); $stmt->bindValue(':mobile', $mobile); $stmt->execute(); $result = $stmt->fetch(PDO::FETCH_ASSOC); return($result); } public function getAllByLimit($limit,$offset) { $sql = "SELECT username FROM members limit ".$limit.",".$offset; $stmt = $this->dbh->query($sql); while ($row = $stmt->fetch()) { //printf("%s\r\n", $row['username']); $result[] = $row['username']; } return $result; } function __destruct() { $this->dbh = null; }}

客户端调用实例

"http://webservice.example.com", 'location'=>'http://webservice.example.com/members', 'compression' => 'SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP', 'login'=>'neo', 'password'=>'chen', 'trace'=>true );$client = new SoapClient(null, $options);try { print_r($client->getAllByUsernameAndMobile('280600086','13113668890')); print_r($client->getAllByLimit(20,20));}catch (Exception $e){ echo 'Caught exception: ', $e->getMessage(), "\n";}

Nginx 虚拟主机配置文件 /etc/nginx/conf.d/webservice.example.com.conf

server {    listen       80;    server_name  webservice.example.com;    charset utf-8;    access_log  /var/log/nginx/webservice.example.com.access.log  main;    auth_basic            "Login";    auth_basic_user_file  htpasswd;    location / {        root   /www/example.com/webservice.example.com/htdocs;        index  index.html index.php;		if ($request_filename !~ (js|css|images|robots/.txt|.*\.html|index/.php) ) {	            rewrite ^/(.*)$ /index.php/$1 last;		    break;		}    }    error_page   500 502 503 504  /50x.html;    location = /50x.html {        root   /usr/share/nginx/html;    }    location ~ /index.php/ {        root           /www/example.com/webservice.example.com/htdocs;        fastcgi_pass   127.0.0.1:9000;        fastcgi_index  index.php;        fastcgi_param  SCRIPT_FILENAME  /www/example.com/webservice.example.com/htdocs$fastcgi_script_name;        include        fastcgi_params;    }}

每增加一个功能需求,在library中创建一个 Class 文件即可。

index.php 有IP过滤功能,禁止非法IP访问

客户端采用压缩传输,节省xml传输开销

Nginx 设置了HTTP认证,防止他人探测,另外提示你还可以采用双向SSL认证。

15.4.2. MQ 实现

原文出处:Netkiller 系列 手札

本文作者:陈景峯
转载请与作者联系,同时请务必标明文章原始出处和作者信息及本声明。

你可能感兴趣的文章
SQL Server索引调优系列
查看>>
SQL 2000中的触发器使用
查看>>
CKEditor与CKFinder的配置(ASP.NET环境)
查看>>
linux运行级别
查看>>
High Availability PostgreSQL HOWTO
查看>>
C#继承机制
查看>>
Silverlight开发工具汇总
查看>>
简单设计实现基于Forms认证的注册登录等用户基础服务
查看>>
MySQL Query Cache 小结
查看>>
MusicXML 3.0 (6) - 符杠分组
查看>>
分享一个比lightbox配置更方便的jQuery web2.0图片显示插件:Topup
查看>>
Linux IPTables: Incoming and Outgoing Rule Examples (SSH and HTTP)
查看>>
C以二进制读、写、文本
查看>>
SYS_Oracle Erp打印机设定(案例)
查看>>
VBS基础篇 - 循环语句(3) - For...Next
查看>>
为你的程序换个皮肤(转载)
查看>>
SQL 学习笔记
查看>>
XML Publisher 并发程序由于"输出提交处理程序提交失败
查看>>
C#温故而知新学习系列之.NET框架高级特性—.NET框架中自身提供的属性(二)
查看>>
ora-12170:tns连接超时
查看>>