PHP能调用python程序是不是一件很爽的事情,有很多大型的处理简单用PHP是不能完成,我们就可以通过ice中间件调用python来完成。首先创建一个Slice文件Hello.ice

#ifndef HELLO_ICE

#define HELLO_ICE

module Demo

{

interface Hello

{

["cpp:const"] idempotent void sayHello(int delay);

["cpp:const"] idempotent string returnHello();

string test(string name);

void shutdown();

};

};

#endif

有了接口文件,开始创建一个python服务端Server.py,代码如下

import sys, traceback, time, Ice

Ice.loadSlice(“Hello.ice”)

import Demo

class HelloI(Demo.Hello):

def sayHello(self, delay, current=None):

if delay != 0:

time.sleep(delay / 1000.0)

print "Hello World!  aaaaaaaa"

def returnHello(self, current=None):

print current

return “hello”

def test(self, name, current=None):

return name

def shutdown(self, current=None):

current.adapter.getCommunicator().shutdown()

class Server(Ice.Application):

def run(self, args):

if len(args) > 1: #文件编译不能带参数

print self.appName() + ": too many arguments"

return 1

adapter = self.communicator().createObjectAdapter("Hello")

adapter.add(HelloI(), self.communicator().stringToIdentity("hello"))

adapter.activate()

self.communicator().waitForShutdown() #挂起等待

return 0

sys.stdout.flush()

app = Server()

sys.exit(app.main(sys.argv, "config.server"))

如果不知道ice怎么用的孩子可以搜索“ice教程.pdf”,我也还在入门中。下面给出PHP代码,有很多方法,用于属性ice操作,聪明的你肯定不难。其中值得说明的是oneway相当于异步,twoway相当于同步。如果有返回值就不能使用oneway。最常见的方法是:通过一个oneway开启处理,再通过一个twoway获取事务状态。

Ice_loadProfile(“hello”);

//

// Change this to true if SSL is configured for the PHP extension.

//

$have_ssl = false;

$res=””;

if(isset($_POST["submitted"]))

{

echo "


";

echo "

Status:

";

try

{

if($have_ssl)

{

$p = $ICE->stringToProxy("hello:tcp -p 10000:udp -p 10000:ssl -p 10001");

}

else

{

$p = $ICE->stringToProxy("hello:tcp -p 60012:udp -p 60012");

}

if(isset($_POST["mode"]))

{

if($_POST["mode"] == "oneway")

{

$p = $p->ice_oneway();

}

elseif($_POST["mode"] == "datagram")

{

$p = $p->ice_datagram();

}

}

$delay = 0;

if(isset($_POST["secure"]) and $_POST["secure"] == "yes")

{

$p = $p->ice_secure(true);

}

if(isset($_POST["timeout"]) and $_POST["timeout"] == "yes")

{

$p = $p->ice_timeout(2000);

}

if(isset($_POST["delay"]) and $_POST["delay"] == "yes")

{

$delay = 2500;

}

if($p->ice_isTwoway())

{

$hello = $p->ice_checkedCast("::Demo::Hello");

}

else

{

$hello = $p->ice_uncheckedCast("::Demo::Hello");

}

if(isset($_POST["sayHello"]))

{

$hello->sayHello($delay);

$res=$hello->test(“this string return from python”); //我Eng很烂

}

elseif(isset($_POST["shutdown"]))

{

$hello->shutdown();

}

echo "OK

";

}

catch(Ice_LocalException $ex)

{

echo "

";

print_r($ex);

echo "

";

}

echo "

";

echo "


";

}

?>

=$res;?>

">

Mode:

> Twoway

> Oneway

> Datagram

Options:

> Secure

> Timeout

> Delay

要使整个过程可以运行,把Hello.ice文件移动到php配置的ice的放置目录下,如,在/etc/php.d中查看ice.ini获取ice文件的存放地址。现在通过终端运行:python Server.py &(这个&是让程序在后台执行,可以通过jobs命令查看,通过kill % 编号关闭)。到此完了

ice php 5.6.32,PHP通过ice调用python程序相关推荐

  1. 详细教你如何部署ICE服务(二)---IceBox加载启动Ice服务

    在上一篇文章中,我使用了自己实现的一个简单容器简单粗暴的启动一个ICE服务,正如上篇文章所总结的那样,这种部署服务的方式存在诸多缺点. 这里我们给出使用IceBox这个框架来开发和部署我们的Ice服务 ...

  2. python 64位程序 打包用于32位系统_python分别打包出32位和64位应用程序

    由于我们分发的python应用可能运行在64位环境,也可能运行在32位环境,所以我们需要为同一套应用代码配置两套打包环境,怎么配置? 步骤如下 1,在电脑上分别下载安装32位和64位的python,安 ...

  3. Step7-Mricro/win S7-200 485轮询 西门子485 modbus RTU 200 ModbusRTU通信S7-200与最大32个从站RS 485主站程序

    Step7-Mricro/win S7-200 485轮询 西门子485 modbus RTU 200 ModbusRTU通信S7-200与最大32个从站RS 485主站程序,程序块自动轮询,无需编写 ...

  4. 玩转Zynq连载32——SDK在线运行裸跑程序

    特权同学玩转Zynq连载32--SDK在线运行裸跑程序 1 SDK在线运行裸跑程序 以zstar_ex50为例,演示如何将裸跑程序在Zstar板上在线运行起来. 点击SDK的菜单Run --> ...

  5. The Internet Communications Engine (Ice) 跨平台异构通讯方案 第一弹-ICE简介

    .net中的通讯方案很多,从.net Remoting,MSMQ,Webservice,WSE,WCF等等,他们都有一个特点,易用,但是都不能跨语种异构,如果你服务端要用java开发,客户端用C#开发 ...

  6. 【Ice】【01】linux 安装ice

    1.centos7安装3.6,如果是centos6的化把el7改成el6 cd /etc/yum.repos.d wget https://zeroc.com/download/Ice/3.6/el7 ...

  7. Ice自学第一步——Windows下安装Ice和设置Ice的环境变量

    第一步,基于Windows下的安装,所以下载windows版的Ice,官网最新版本是Ice3.4.2: http://www.zeroc.com/download/Ice/3.4/Ice-3.4.2. ...

  8. 2的32次方减1用python,第二章python入门

    2.1 环境的安装 解释器:py2.py3 开发工具:pycharm 2.2编码 2.2.1编码基础 初识编码 ASCII码 :英文 8位表示一个东西 2**8 ,8位等于一个字节 Unicode:( ...

  9. 64位进程调用32位dll的解决方法 / 程序64位化带来的问题和思考

    最近做在Windows XP X64,VS2005环境下做32位程序编译为64位程序的工作,遇到了一些64位编程中可能遇到的问题:如内联汇编(解决方法改为C/C++代码),long类型的变化,最关键的 ...

  10. linux交叉编译tile环境搭建,g ++ - 在Ubuntu中在32位上交叉编译64位程序时,缺少包含“bits / c ++ config.h”...

    在我的64位系统上,我注意到存在以下目录: /usr/include/c++/4.4/x86_64-linux-gnu/32/bits 那么我的32位系统已经设置为64位交叉编译就应该有一个相应的目录 ...

最新文章

  1. 【Java例题】4.1 级数求和1
  2. 使用@Configuration注解来代替Spring的bean配置
  3. Live Migrate 操作 - 每天5分钟玩转 OpenStack(42)
  4. LeetCode算法入门- Remove Nth Node From End of List -day17
  5. 数字图像处理--图像颜色
  6. ORACLE HANDBOOK系列之十:字符集、编码以及Oracle的那些事
  7. DNSPod揭6省断网重大事故内幕:网游私服恶斗
  8. 第二章 ---- spring注解开发
  9. 新扬天电脑所配USB键盘功能键驱动问题注意事项
  10. centos未能加载虚拟光盘 C:\Program Files\Oracle\VirtualBox\VBoxGuestAdditions
  11. powerbi导入地图_在Microsoft Power BI中创建地图的10种方法
  12. win10没有本地组策略怎么办?
  13. linux版wps系统缺失字体,ubuntu wps 字体缺失的解决方法
  14. 【DVB】【ATSC】ATSC和DVB数字电视系统的比较
  15. CAD二次开发(C#)之添加文字样式
  16. git中提交显示!rejected,如何解决?
  17. 非洲正在打造一个完全不同的人工智能产业
  18. 基于AD9854个和MSP430的波形发生器
  19. 鸡兔同笼问题的python解法
  20. php函数大全 笔记,PHP的String函数笔记

热门文章

  1. 科普一下: 关于C语言中的运算符优先级
  2. python计算图像面积_利用图像处理计算叶片面积
  3. 信创云:打造自主可控云基础设施 | 厂商征集
  4. simulink 全桥逆变无控整流DC-DC电路
  5. 线上问题:nginx日志打印时间问题
  6. 网上商城系统支付方式如何配置?支付方式有哪些
  7. sql server 常用工具
  8. 俄语入门-俄语语音规则
  9. 一个很好玩的自动关机小程序
  10. JavaFX 过时了吗?你怎么看,闲暇之余实现一版贪吃蛇小游戏,放松一下!