设为首页 收藏本站
查看: 1669|回复: 0

[经验分享] php通过ice通信引擎调用python服务

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-4-24 09:48:46 | 显示全部楼层 |阅读模式
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
1
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端
1
python server.py
6、运行client端
1
python client.py
7、服务端运行结果如下图:服务端接收到了客户端消息
wKiom1NXvoHQkj5-AABJ0ShiwuM853.jpg

————————————————————————————
用上边的hello.ice、server.py
用php写客户端程序,通过ice进行通信
————————————————————————————

1、Compiling a Slice Definition for PHP
1
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
1
php -f client.php
4、服务端运行结果如下图:服务端接收到了客户端消息
wKiom1NXv-3wQJWFAABk7FPBcH8630.jpg

参考资料:
http://www.zeroc.com/download.html
http://doc.zeroc.com/display/Ice/Writing+a+Slice+Definition
http://doc.zeroc.com/display/Ice ... ication+with+Python
http://doc.zeroc.com/display/Ice ... pplication+with+PHP

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


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-18310-1-1.html 上篇帖子: PHP之XML节点追加操作讲解 下篇帖子: php生成验证码函数 python 通信
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表