PHP中间件--ICE

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介:

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)
 

2)

编辑zeroc-ice.repo:

[zeroc-ice]

name=Ice 3.4 for Red Hat Enterprise Linux releaseverreleasever−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 = null;     try     {
ic = Ice_initialize(); 
base=base=ic->stringToProxy("SimplePrinter:default -p 10000"); 
printer=DemoPrinterPrxHelper::checkedCast(printer=DemoPrinterPrxHelper::checkedCast(base); 
if(!$printer) 
throw new RuntimeException("Invalid proxy");

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

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

echo $ex; 
}

if(ic)
     {

     // Clean up

     try

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

catch(Exception ex)

     {

     echo
ex)     {     echo
ex; 


?>

H

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

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

 

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

 

 

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

 


本文转自轩脉刃博客园博客,原文链接:http://www.cnblogs.com/yjf512/archive/2011/06/07/2074554.html,如需转载请自行联系原作者

相关文章
|
11天前
|
缓存 中间件 PHP
【PHP开发专栏】PHP框架中的路由与中间件
【4月更文挑战第29天】本文探讨了PHP框架中的路由和中间件概念。路由负责将HTTP请求映射到控制器方法,提供灵活的请求处理和URL管理。中间件则是在请求处理前后插入的代码,用于实现如身份验证、日志等功能,与业务逻辑解耦。通过Laravel框架的示例展示了如何定义路由和创建中间件,以实现代码的模块化和可维护性。
|
安全 前端开发 中间件
PHP:laravel中间件和控制器的请求参数传递与获取
PHP:laravel中间件和控制器的请求参数传递与获取
189 2
PHP:laravel中间件和控制器的请求参数传递与获取
|
Java 中间件 ice
【通信中间件】电信级解决方案中间件ICE编程入门指南
作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/   0.ICE介绍:ICE(Internet Communications Engine)是ZeroC提供的一款高性能的中间件,基于ICE可以实现电信级的解决方案。
1009 0
|
8月前
|
关系型数据库 MySQL PHP
PHP 原生操作 Mysql
PHP 原生操作 Mysql
82 0
|
8月前
|
关系型数据库 MySQL 数据库连接
PHP 原生连接 Mysql
PHP 原生连接 Mysql
108 0
|
8月前
|
关系型数据库 MySQL Unix
PHP MySql 安装与连接
PHP MySql 安装与连接
135 0
|
4月前
|
关系型数据库 MySQL PHP
|
11天前
|
关系型数据库 MySQL PHP
【PHP 开发专栏】PHP 连接 MySQL 数据库的方法
【4月更文挑战第30天】本文介绍了 PHP 连接 MySQL 的两种主要方法:mysqli 和 PDO 扩展,包括连接、查询和处理结果的基本步骤。还讨论了连接参数设置、常见问题及解决方法,如连接失败、权限和字符集问题。此外,提到了高级技巧如使用连接池和缓存连接信息以优化性能。最后,通过实际案例分析了在用户登录系统和数据管理中的应用。
|
26天前
|
PHP
web简易开发——通过php与HTML+css+mysql实现用户的登录,注册
web简易开发——通过php与HTML+css+mysql实现用户的登录,注册