PHP中间件--ICE

简介:

ICE(Internet Communications Engine)是Zeroc提供的一款高性能的中间件。使用ICE能使得php(或c++,java,python)与java,c++,.net,python等进行交互。基于ICE可以实现电信级的解决方案。

 

1第一个问题:为什么要使用中间件?

设想一个这样的场景:对于一个大型网站来说,往往有很多个web服务器,每个web服务器都存在很多对于数据库的操作。如果直接在php程序上直接操作数据库,那么势必要在每台web服务器都配置数据库的用户名,密码等信息,这是极度不安全的。并且如果我们要统一对数据库的操作进行管理和修改等,那么久要去每个web服务器上修改。因此,这时候中间件就产生了。它是基于SOA(面向服务架构)的思想,将对数据库的操作统一成一个服务,放置于一台服务机上,每个web服务器要对数据库进行操作,就可以直接访问这个提供中间件服务的服务器。

还有一点,考虑到性能问题,这里的提供服务的机子我们不使用html和xml传输数据,一般使用TCP,UDP这层的通信。

因此ICE就是现在非常流行的网站开发中间件之一。

 

关于更多理解为何使用中间件的原因这里有两个链接:

http://blog.csdn.net/phphot/archive/2009/04/18/4089806.aspx

http://hi.baidu.com/xdh2571/blog/item/8f01fafc4debfc89b801a04b.html

 

对于ICE,它是怎么样通信结构?

ICE有分为提供服务的一方Server和寻求服务的一方Client,两台机子上都需要安装ICE组件,他们的通信结构如下:

ICE

 

Client端应该事先知道Server端能提供的服务是什么,有什么格式?这就是图中的Proxy Code,在Proxy Code中定义好了类和接口。Server端中接口定义的就是Skeleton,具体实现接口的是Server Application,Server Application可以是C++,java,C#等写的,但是ICE不提供PHP写Server端。

 

3 安装ICE

安装环境: CentOS

1)
cd /etc/yum.repos.d/
wget http://www.zeroc.com/download/Ice/3.4/rhel5/zeroc-ice.repo

2)

编辑zeroc-ice.repo:

[zeroc-ice]

name=Ice 3.4 for Red Hat Enterprise Linux  r e l e a s e v e r basearch

baseurl=http://www.zeroc.com/download/Ice/3.4/rhel5/$basearch

enabled=1

gpgcheck=1

gpgkey=http://www.zeroc.com/download/RPM-GPG-KEY-zeroc-release

3)

使用yum安装

yum install ice* db46* mcpp-devel

4)

确认机子是否安装g++,如果没有,则安装:

yum install gcc-c++ libstdc++-devel

 

4 写一个ICE例子,目的:Client端每调用一次服务,Server端就打出一个"hello world”;

 

基本环境:由于是实验目的,我仅仅将Client和Server同当做一台CentOS机子

 

A 建文件夹: mkdir ice_demo

 

B 创建文件Printer.ice,这个.ice文件是ICE的slice文件,在其中定义了服务的对象和接口

module Demo { 
interface Printer { 
void printString(string s); 
}; 
};

 

C #slice2cpp Printer.ice //产生出了Printer.h和Printer.cpp两个文件

D 创建Server.cpp

#include <Ice/Ice.h> 
#include <Printer.h> 
  
using namespace std; 
using namespace Demo; 
  
class PrinterI : public Printer { 
public: 
virtual void printString(const string& s, 
const Ice::Current&); 
}; 
  
void  
PrinterI:: 
printString(const string& s, const Ice::Current&) 

cout << s << endl; 

  
int 
main(int argc, char* argv[]) 

int status = 0; 
Ice::CommunicatorPtr ic; 
try { 
ic = Ice::initialize(argc, argv); 
Ice::ObjectAdapterPtr adapter 
= ic->createObjectAdapterWithEndpoints( 
"SimplePrinterAdapter", "default -p 10000"); 
Ice::ObjectPtr object = new PrinterI; 
adapter->add(object, 
ic->stringToIdentity("SimplePrinter")); 
adapter->activate(); 
ic->waitForShutdown(); 
} catch (const Ice::Exception& e) { 
cerr << e << endl; 
status = 1; 
} catch (const char* msg) { 
cerr << msg << endl; 
status = 1; 

if (ic) { 
try { 
ic->destroy(); 
} catch (const Ice::Exception& e) { 
cerr << e << endl; 
status = 1; 


return status; 
}

E

#c++ -I. -I$ICE_HOME/include -c Printer.cpp Server.cpp

# c++ -o server Printer.o Server.o \ -L$ICE_HOME/lib -lIce –lIceUtil   //在同文件夹下会出现:server执行文件

 

F #slice2php Printer.ice

G 创建Client.php

<?php 
require 'Ice.php'; 
require 'Printer.php';

ic = null;     try     { ic = Ice_initialize(); 
b a s e = ic->stringToProxy("SimplePrinter:default -p 10000"); 
p r i n t e r = D e m o P r i n t e r P r x H e l p e r :: c h e c k e d C a s t ( base); 
if(!$printer) 
throw new RuntimeException("Invalid proxy");

printer->printString("Hello World!");     }     catch(Exception ex) 

echo $ex; 
}

if( ic)     {     // Clean up     try     { ic->destroy(); 

catch(Exception  ex)     {     echo ex; 


?>

H

打开一个终端运行 #./server

打开另一个终端运行 php Client.php

 

发现每运行一次Client.php,第一个终端就打出一个Hello World. ICE 运行成功.

 

 

附注:大型的网站对于ICE的使用是很多的。比如需要实现一个分词搜索的功能使用lucence,对数据库的访问,对memcached的访问都可以直接在ICE中写一个服务来提供统一管理和使用

 

 

作者:轩脉刃(yjf512) 
出处:(http://www.cnblogs.com/yjf512/) 
版权声明:本文的版权归作者与博客园共有。欢迎转载阅读,转载时须注明本文的详细链接。 

 

[参考文章]

http://blog.csdn.net/phphot/archive/2009/04/18/4089806.aspx

http://hi.baidu.com/xdh2571/blog/item/8f01fafc4debfc89b801a04b.html

http://www.zeroc.com/

(特别是里面的Document)

http://blog.csdn.net/cnhome/archive/2008/11/18/3331279.aspx

目录
相关文章
|
4月前
|
机器学习/深度学习 人工智能 自然语言处理
解读论文《SkillOrchestra: Learning to Route Agents via Skill Transfer》
AI系统由多模型协作时,"派谁上场"是核心难题。现有方法要么无法应对多步骤任务,要么陷入"总调最贵模型"的死胡同。SkillOrchestra从历史轨迹提炼"技能手册",让编排器匹配最合适的智能体,性能提升22.5%,成本节省700倍。
610 1
|
3月前
|
Web App开发 前端开发 数据安全/隐私保护
从工具到“数字员工”:OpenClaw 云电脑部署与未来形态思考
本文详解如何通过阿里云部署预装OpenClaw的云电脑——即开即用的Docker容器,含桌面环境、Chrome、拼音输入法及自动备份/纯净启动等特性,全程图文指引,零配置快速体验。
294 28
从工具到“数字员工”:OpenClaw 云电脑部署与未来形态思考
|
数据安全/隐私保护
fiddler抓包-查看get与post请求参数
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34173549/article/details/81566563 Fiddler抓包3-查看get与post请求 前言 前面两篇关于Fiddler抓包的一些基本配置,配置完之后就可以抓到我们想要的数据了,接下来就是如何去分析这些数据。
7189 0
|
4月前
|
人工智能 自然语言处理 Linux
OpenClaw(Clawdbot)新手完整学习路径:阿里云/本地部署+百炼API配置+集成/使用/开发Skill+避坑指南
对零基础用户而言,学习OpenClaw(原Clawdbot)的核心痛点并非“技术难度”,而是“路径混乱”——不清楚先学什么、再练什么,容易在部署环节卡壳,或因技能安装过多导致功能冲突。2026年最新版OpenClaw已完成核心架构升级,采用“微内核+网关+技能插件”的轻量化设计,同时优化了对阿里云的适配与本地部署流程,让新手可通过“认知建立→环境部署→API配置→技能实战→进阶优化”的五步路径,在1周内实现从“零基础”到“熟练使用”的跨越。
1819 1
|
3月前
|
人工智能 移动开发 API
阿里云最新域名活动信息:域名注册、转入活动及续费优惠口令分享
2026年阿里云推出域名优惠活动,涵盖注册、续费、转入三大场景:注册方面提供.cn低至19元、.com首年35元(需满足关联域名注册条件)、.net首年39元(需关联.com域名)等特价,新用户可享15元AI建站套餐含云资源及赠送.CN域名;续费环节通过专属优惠口令实现减免,口令涵盖com/cn/xin等后缀的续费场景;转入服务每周三提供阶梯折扣,单笔订单转入5个及以上.com域名仅需78元。活动通过批量注册包、关联域名优惠等形式,结合AI建站套餐赠送域名等组合策略,全面降低用户域名使用成本。
|
9月前
|
人工智能 开发框架 自然语言处理
智能体来了!从大学课堂到产业实践,AI人才培养的全新路径
人工智能浪潮加速,“智能体”正推动AI从技术走向应用。黎跃春教授倡导智能体教育与产业融合,提出“3+2”学习路径,助力大学生零基础入门、实战进阶,培养跨学科创新人才,迎接未来AI新蓝海。
|
人工智能 算法 Python
【随手记】python的heapq库的基本用法
【随手记】python的heapq库的基本用法
672 1
|
存储 监控 虚拟化
Hyper V上网优化:提升虚拟机网络速度
要优化Hyper-V虚拟机的网络速度,可从以下几方面入手:1. 优化虚拟交换机配置,如选择合适的交换机类型、启用SR-IOV、配置VLAN和QoS策略;2. 调整网络适配器设置,选择适当的适配器类型并启用VRQ等;3. 优化宿主机网络配置,更新网卡固件和驱动,启用硬件加速;4. 使用性能监视工具监控网络流量;5. 其他措施如启用硬件虚拟化、使用外部存储、配置NLB等。通过合理配置,可显著提升网络性能。
1736 17
|
编译器 C语言 C++
【C语言程序设计——选择结构程序设计】求输入的日期是该年的第几天(头歌实践教学平台习题)【合集】
本任务要求编写程序,根据用户输入的年月日(以空格或回车分隔),计算并输出该天是该年的第几天,需注意判断闰年。主要内容包括: 1. **任务描述**:实现从键盘输入年月日,计算该天是当年的第几天。 2. **相关知识**: - `switch` 结构的基本语法及使用注意事项。 - 判断闰年的条件:能被4整除但不能被100整除,或能被400整除的年份为闰年。 3. **编程要求**:根据提示补充代码,确保程序正确处理输入并输出结果。 4. **测试说 示例代码展示了如何使用 `switch` 语句和闰年判断逻辑来完成任务。通过此练习,掌握 `switch` 语句的应用及闰年判断方法。
677 0
|
前端开发 JavaScript 算法
Github 最受欢迎的 35 个项目一览
Github 最受欢迎的 35 个项目一览
1093 0

热门文章

最新文章