php+ice接口调用+demo,php通过ice通信引擎调用python服务

PHP调用python,有很多种方式,查阅了下,大致有以下方式:

system、exec、shell_exec、passthru

popen、proc_open

socket

ppython

PHPRPC

pip(python in php)

XMLRPC、jsonrpc

当然,还有ice这种通信组件,今天配置了下ice、然后运行了简单的php和python通信、python和python通信的示例程序。

下载和安装参见http://www.zeroc.com/download.html的Packages for Ubuntu 13.04 (Raring Ringtail) and 14.04 (Trusty Tahr)和Install instructions for Ubuntu 13.04 (Raring Ringtail)两部分,安装过程只碰到一个问题:E: Unable to locate package db5.3-utils,后来发现是程序包名错了,应该是db5.3-util

――――――――――――――――――――――――――

用python写服务端和客户端程序,通过ice进行通信

――――――――――――――――――――――――――

1、Writing a Slice Definition:hello.ice

module Demo {

interface Printer {

void printString(string s);

};

};

2、Compiling a Slice Definition for Python

slice2py hello.ice

3、Writing a Server in Python:server.py

import sys, traceback, Ice

import Demo

class PrinterI(Demo.Printer):

def printString(self, s, current=None):

print s

status = 0

ic = None

try:

ic = Ice.initialize(sys.argv)

adapter = ic.createObjectAdapterWithEndpoints("SimplePrinterAdapter", "default -p 10000")

object = PrinterI()

adapter.add(object, ic.stringToIdentity("SimplePrinter"))

adapter.activate()

ic.waitForShutdown()

except:

traceback.print_exc()

status = 1

if ic:

# Clean up

try:

ic.destroy()

except:

traceback.print_exc()

status = 1

sys.exit(status)

4、Writing a Client in Python:client.py

import sys, traceback, Ice

import Demo

status = 0

ic = None

try:

ic = Ice.initialize(sys.argv)

base = ic.stringToProxy("SimplePrinter:default -p 10000")

printer = Demo.PrinterPrx.checkedCast(base)

if not printer:

raise RuntimeError("Invalid proxy")

printer.printString("python client say hello!")

except:

traceback.print_exc()

status = 1

if ic:

# Clean up

try:

ic.destroy()

except:

traceback.print_exc()

status = 1

sys.exit(status)

5、运行server端

python server.py

6、运行client端

python client.py

7、服务端运行结果如下图:服务端接收到了客户端消息

0818b9ca8b590ca3270a3433284dd417.png

――――――――――――――――――――――――――――

用上边的hello.ice、server.py

用php写客户端程序,通过ice进行通信

――――――――――――――――――――――――――――

1、Compiling a Slice Definition for PHP

slice2php hello.ice

2、Writing a Client in PHP:client.php

require 'Ice.php';

require 'hello.php';

$ic = null;

try

{

$ic = Ice_initialize();

$base = $ic->stringToProxy("SimplePrinter:default -p 10000");

$printer = Demo_PrinterPrxHelper::checkedCast($base);

if(!$printer)

throw new RuntimeException("Invalid proxy");

$printer->printString("php client say hello!");

}

catch(Exception $ex)

{

echo $ex;

}

if($ic)

{

// Clean up

try

{

$ic->destroy();

}

catch(Exception $ex)

{

echo $ex;

}

}

?>

3、执行php或访问php

php -f client.php

4、服务端运行结果如下图:服务端接收到了客户端消息

0818b9ca8b590ca3270a3433284dd417.png

参考资料:

注:我的环境是ubuntu kylin 13.04/apache2.2.22/python2.7.4/ice3.5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值