SOA面向服务框架设计与实现

文章节选自 《Netkiller Architect 手札》

创新互联坚持“要么做到,要么别承诺”的工作理念,服务领域包括:网站设计制作、成都网站设计、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的吉木萨尔网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!

由于Java 语言的编译与重启不可抗拒缺陷,所选择使用PHP弥补这个缺陷。

在合适的场景中使用PHP 为 Java 提供 SOA 服务有很多优势,的优势就是升级,能够随时升级,即时生效,服务不中断。

任何一种语言都有其擅长的一面,多种语言互补是一种趋势。

14.4.Service-oriented architecture (SOA)

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

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

14.4.1.SOAP实现

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

index.php入口文件

<?php define (\'CONFIG_DIR\', \'../config/\'); define (\'LIBRARY_DIR\', \'../library/\'); define (\'DEBUG\', false); //define (\'DEBUG\', ture); require_once(CONFIG_DIR. \'default.php\'); $remote_addr = $_SERVER[\'REMOTE_ADDR\']; if(!in_array($remote_addr, $firewall)) { printf("Permission denied: %s", $remote_addr); exit(0); } $request_uri = $_SERVER[\'REQUEST_URI\']; $classspath = LIBRARY_DIR.strtolower($request_uri) . \'.class.php\'; if( is_file($classspath) ){ require_once($classspath); }else{ die("Cannot loading interface!"); } $class = ucfirst(substr($request_uri, strrpos($request_uri, \'/\')+1)); if( DEBUG ){ printf("%s<br>",$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.\'); }

接口文件

<?php require_once(\'common.class.php\'); class Members extends Common{ private $dbh = null; public function __construct() { parent::__construct(); $this->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("%srn", $row[\'username\']); $result[] = $row[\'username\']; } return $result; } function __destruct() { $this->dbh = null; } }

客户端调用实例

<?php $options = array(\'uri\' => "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认证。

有兴趣可以看看这个项目:

https://github.com/netkiller/SOA

延伸阅读

数据库安全·保护表

数据库安全·保护表字段

数据库安全·时间一致性

数据库安全·为数据安全而分库

数据库安全·内容版本控制,撰改留痕

数据库安全·用户/角色认证

数据库安全·Token 认证

数据库安全·数据加密

数据库安全·开发加密插件

数据与应用程序间通信·UDP Socket

关注作者公众号,每日推送原创文章。如果已有什么建议,请给我留言。

分享文章:SOA面向服务框架设计与实现
URL标题:https://www.cdcxhl.com/article20/cgieco.html

成都网站建设公司_创新互联,为您提供建站公司网站策划云服务器营销型网站建设标签优化品牌网站建设

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都app开发公司