PHP没有中间件,导致了对很多麻烦。比如,对数据库的操作必须要链接数据库,然后做SQL操作。WEB程序直接操作数据库的方法,这样会带来很多人为因素的事故隐患,以及管理上的麻烦,尤其是对大型的网站应用来说。规范的模式应该是,WEB程序传递参数到一个服务程序上,由该服务程序进行判断并最终操作数据库或者其它数据文件,这样做到了明确权限控制,和业务类型集中管理。去年伴随着ICE的推出,PHP终于有了可以使用的中间件。在PHP的发展史上,应该是一个里程碑。

ICE入门

ICE(Internet Communications Engine 网络通讯引擎),是由Corba原核心成员开发的一个开源中间件,据称其各种性能完全优于Corba。除此之外,我们第一次见到了直接支持PHP的中间件。

ICE的安装,去 下载一个Ice针对PHP的安装包,按照说明安装上。

ICE的使用:使用Slice(ICE的一种简单语法脚本),编写一个xx.ice文件。可以使用slice2cpp或slice2java等生成一个cpp或java的ICE框架程序,然后在这个框架程序中进行代码编写。ICE在PHP的应用继承了PHP的一贯传统——简单,只需要在php.ini中加载该xx.ice,在PHP中就可以使用了。

ICE在PHP应用中的缺点,无法使用PHP编写Server端,其实这也是PHP的一个缺陷——没有完善的多进程和多线程管理机制。因此,Server端可以采用ICE所支持的其它语言进行编写,比如JAVA/C++/VB/PYTHON等。

开始传说中的“互联互通”

本例以 Ice 3.2.1为例 下载的位置和参考的文档都在下面

ICE其实是一个网络框架,入门说明中说了,PHP不能用来做服务端,在这里我们使用java来做服务端,用php来连java,达到传说中的“互联互通”。

我们的服务端用Linux,客户端也用Linux(纯废话)。JAVA环境的搭建不在表述了。

在下载可以看出来,服务器支持yum或者是rpm是多么幸福的一件事情,或者搞一份tar.gz的包下来configure make make install,大概也就是这样。好了这样子就表示安装结束了。。。

安装之后的Ice相关路径:

slice2cpp,slice2java在/usr/bin/下

Ice.jar 存储于 /usr/share/java/下

相关的Ice的库存储于/usr/lib下.

第1步,建立服务器端的demo.ice的文件(注意代码里的半全角,如果是全角自行转成半角):

module Demo{

interface test{

string   execute(string mth,string cmd);

};

};

第2步,执行: slice2java demo.ice 生成一堆文件。。。

第3步,动手干活

上一步执行完会在当前目录产生一个Demo目录,目录下自动生成:

-rw-r–r–  1 root root 2316  4月 15 17:01 _testDelD.java

-rw-r–r–  1 root root  560  4月 15 17:01 _testDel.java

-rw-r–r–  1 root root 1929  4月 15 17:01 _testDelM.java

-rw-r–r–  1 root root 4177  4月 15 17:01 _testDisp.java

-rw-r–r–  1 root root 1070  4月 15 17:01 testHolder.java

-rw-r–r–  1 root root  488  4月 15 17:01 test.java

-rw-r–r–  1 root root  481  4月 15 17:01 _testOperations.java

-rw-r–r–  1 root root  460  4月 15 17:01 _testOperationsNC.java

-rw-r–r–  1 root root 5418  4月 15 17:01 testPrxHelper.java

-rw-r–r–  1 root root  569  4月 15 17:01 testPrxHolder.java

-rw-r–r–  1 root root  567  4月 15 17:01 testPrx.java

到目前为止,demo.ice所以Ice接口部分的定义以及相关依赖都已经自动生成.

我们要实现自己的execute方法,覆盖testPrx.java的同名:

//TestImp.java

package Demo;

import Ice.Current;

public class TestImp extends _testDisp{

public String execute(String mth, String cmd, Current __current) {

// TODO Auto-generated method stub

return mth+cmd;

}

}

第4步,建立一个Server服务在10000进行侦听

//Server.java

package Demo;

public class Server {

public static void main(String[] args) {

int status = 0;

Ice.Communicator ic = null;

try {

ic = Ice.Util.initialize(args);

Ice.ObjectAdapter adapter = ic.createObjectAdapterWithEndpoints(

“TestAdapter”, “default -p 10000″);

Ice.Object object = new TestImp();

adapter.add(object, ic.stringToIdentity(”TestAdapter”));

adapter.activate();

ic.waitForShutdown();

} catch (Ice.LocalException e) {

e.printStackTrace();

status = 1;

} catch (Exception e) {

System.err.println(e.getMessage());

status = 1;

}

if (ic != null) {

// Clean up

//

try {

ic.destroy();

} catch (Exception e) {

System.err.println(e.getMessage());

status = 1;

}

}

System.exit(status);

}

}

以上大部分代码都是框架生成,你只需要在里面填写TODO。把这个代码拖回来用eclipse打成jar包,注意,需要依赖ice.jar这个包,这个包可以在网站下载到。

生成DemoServer.ajr后传到服务器,运行java -cp ./:Ice.jar:DemoServer.jar Demo.Server

运行成功的条件是Ice.jar和DemoServer.jar都在一个目录里。(Ice.jar从下载地址下载)

Server运行之后监听于10000端口,需要修改iptables,允许其他机器可以连接。

编辑 iptables

vi /etc/sysconfig/iptables

-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport10000-j ACCEPT

继续深入互联互通

这一节完成了Server,一个10000端口的Server在等待着我们用PHP来联通中。下一节,我们将讲述:IcePHP环境的搭建,PHP调用Ice如何与JAVA互联互通,以及一个完整的Demo,保存好本节的代码,后面还有用处。[未完待续]

转载自[]

本文链接:

ice 服务java连接,“先进的互联互通技术”–使用ice联通php和java [part 1 server]相关推荐

  1. 实验:GNS3中创建PC机与连接交换机实现互联互通

    文章目录 实验目的 第一种:使用自带的vpc连接交换机互联互通 第二种:配合使用vmware连接GNS3中交换级互联互通 总结 实验目的 了解GNS3的一些基本使用 第一种:使用自带的vpc连接交换机 ...

  2. 【洞见观点】金融领域隐私计算平台间的互联互通技术实践与研究

    目录 互联互通的定义 互联互通的原则 互联互通演进史 第一阶段:业务驱动不同厂商的隐私计算平台一对一对接 第二阶段:厂商自定义自己的互通规范 第三阶段:形成行业统一的标准规范 互联互通的实现路径 第一 ...

  3. 中软国际入职java考核_中软国际技术人员入职试题2(Java)

    中软国际技术人员入职试题2(Java) Java 笔试试题 一.介绍JSP中常用的内部对象.(时间4分钟) 1 request 2 response 3 out 4 application 5 ses ...

  4. 普联技术java工程师_【普联技术(TP-LINK)工资】java开发工程师待遇-看准网

    一共两轮面试:一面技术面,二面主管面.TP面试的效率很高,基本很短时间就会决定你是否通过,两场面试下来我对面试官的面试专业程度和面试态度我觉得都无可挑剔,会挖一般人注意不到的小坑,来寻求你一面技术面主 ...

  5. 互联互通、电子病历、智慧服务、智慧管理、公立医院绩效考核的5项测评

    互联互通.电子病历.智慧服务.智慧管理.公立医院绩效考核的5项测评 简要说明 互联互通测评 智慧服务和智慧管理 公立医院绩效考核 电子病历评级 简要说明   互联互通.电子病历.智慧服务.智慧管理.公 ...

  6. 条码支付互联互通介绍

    条码支付互联互通介绍 目录 1.工作背景 2.银联方案 3.与T合作情况 1.工作背景 存在问题 APP与条码之间无法互认互扫. 商户拓展各自为战. 工作过程 总行科技司组织清算协会.银联.网联.银行 ...

  7. 百度拆除互联网围墙,与美团、小红书等十余家企业互联互通

     关注ITValue,看企业级最新鲜.最价值报道! 1月17日,百度联合美团.小红书.顺丰.携程.知乎.同程.猫眼.58同城等十余家企业宣布开启互联互通深度合作,将以春节为起点,在流量.技术.服务生态 ...

  8. 金融电子化 | 招商银行与洞见科技、平安科技等五方隐私计算平台互联互通实践

    文 / 招商银行隐私计算互联互通项目组 数字化时代,数据成为重要的生产要素,也是银行数字化经营和风险控制的关键.但在现实生活中,数据产生于不同的场景,金融机构往往需要从众多机构实体中获取海量数据以支撑 ...

  9. java ibm 2035,C# java 连接 IBM MQ时出现 2035 或 2013认证错误的解决方法

    当C# 或 java 连接 IBM MQ 是出现 2035 或 2013的错误时 java的错误提示: com.ibm.msg.client.jms.DetailedJMSSecurityExcept ...

最新文章

  1. 小组级git服务器搭建
  2. [Swift]LeetCode218. 天际线问题 | The Skyline Problem
  3. 面试题27. 二叉树的镜像
  4. 最强AI挑战中国英语阅读理解:只得70多分,不如中等生
  5. Python学习——K近邻算法
  6. 【渝粤教育】国家开放大学2018年秋季 1121t健康教育与健康促进 参考试题
  7. Atitit 团队建设的知识管理
  8. leetcode算法88.合并两个有序数组
  9. Debian中安装Vmware Tools
  10. java开源cad_.Net开源项目(包含CAD支持)
  11. 线性代数---二阶行列式
  12. 只要 Github 域名指向任意 IP,该 IP 的 443 端口就会超时 3 分钟(TCPing, 80 端口正常)
  13. Unity 人物描边解决方案
  14. 协同OA产品要完全符合企业的办公模式吗?
  15. IBM创磁带存储新纪录
  16. 幸福工厂超级计算机有什么用,幸福工厂全替换配方简评
  17. 一起学Java虚拟机(一),数据结构java语言描述百度云
  18. Java向word文档中添加水印
  19. 使用openfeign调用报错java.io.IOException: too many bytes written,以及调用过程中参数传递为空等问题
  20. 针式打印机步进电机介绍

热门文章

  1. .Net Core 集成 Kafka
  2. 50K求聘.NET,我们是认真的!
  3. NET问答: 如何按属性进行 Distinct() ?
  4. 欲善其事,先利其器 | IDCF第6期DevOps案例研究回顾(附视频)
  5. 如何在 C# 中使用 RabbitMQ
  6. Asp.Net Core 中间件应用实战中你不知道的那些事
  7. 如何让 Azure AD 里的应用只允许特定用户登录
  8. .NET Conf 2019 今天在上海开幕,图片直播地址
  9. .Net Core3.0 日志 logging
  10. 在ASP.NET Core中使用EPPlus导入出Excel文件