- 浏览: 537044 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
gaolegao2008:
如果报 is_volum 列名找不到之类的,我是从新部署了一个 ...
spring quartz 定时器报错 -
gaolegao2008:
部署到linux上时,还有一种情况就是mysql数据库区分大小 ...
spring quartz 定时器报错 -
qq123zhz:
yahier 写道 对我有帮助,但我看的一个demo程序,却没 ...
spring quartz 定时器报错 -
qq123zhz:
这个要在eclipse的插件环境下运行的,你不懂eclipse ...
GEF 自动布局 -
qq123zhz:
这个很久了,不记得啥时候写的了
json转为Map
[["java:package:com.demo"]] module zhz { struct Person{ string name; string password; }; dictionary<long,Person>PersonList; interface PersonInter{ void sendUser(Person p); Person returnPerson(); }; };
ice文件添加一个Person对象,一个字典表,表中为person对象,另外是一个方法调用。
client.java
package test; import org.apache.log4j.Logger; import com.demo.zhz.Person; import com.demo.zhz.PersonInterPrx; import com.demo.zhz.PersonInterPrxHelper; public class Client extends Ice.Application { /** * Logger for this class */ private static final Logger logger = Logger.getLogger(Client.class); class ShutdownHook extends Thread { public void run() { if (logger.isDebugEnabled()) { logger.debug("run() - start"); //$NON-NLS-1$ } try { communicator().destroy(); } catch (Ice.LocalException ex) { logger.error("run()", ex); //$NON-NLS-1$ ex.printStackTrace(); } if (logger.isDebugEnabled()) { logger.debug("run() - end"); //$NON-NLS-1$ } } } private String str = "My name is alex J, monster fairy is my baidu ID, the ICE Demo is running now! 八月初十"; public int run(String[] args) { if (logger.isDebugEnabled()) { logger.debug("run(String[]) - start"); //$NON-NLS-1$ } if (args.length > 0) { System.err.println(appName() + ": too many arguments"); if (logger.isDebugEnabled()) { logger.debug("run(String[]) - end"); //$NON-NLS-1$ } return 1; } // setInterruptHook(new ShutdownHook()); PersonInterPrx prx = PersonInterPrxHelper.checkedCast(communicator().propertyToProxy("Span.Proxy").ice_twoway().ice_timeout(-1).ice_secure(false)); // 这里会读取配置文件中的内容,找到对应的suibianjiao服务相关端口和协议,当然,配置文件中用span也可以,我们在服务端代码中写了对应代码。 if (prx == null) { System.err.println("invalid proxy"); if (logger.isDebugEnabled()) { logger.debug("run(String[]) - end"); //$NON-NLS-1$ } return 1; } Person holder = new Person(); holder.name = "zhz"; holder.password = "zhenghuazhi"; prx.sendUser(holder); if (logger.isDebugEnabled()) { logger.debug("run(String[]) - end"); //$NON-NLS-1$ } return 0; } public static void main(String[] args) { if (logger.isDebugEnabled()) { logger.debug("main(String[]) - start"); } Client app = new Client(); int status = app.main("Client", args, "client.properties");// 这里加载配置文件 System.exit(status); if (logger.isDebugEnabled()) { logger.debug("main(String[]) - end"); } } } server.java
package test; import org.apache.log4j.Logger; import Ice.Application; public class Server extends Ice.Application { /** * Logger for this class */ private static final Logger logger = Logger.getLogger(Server.class); // class ShutdownHook extends Thread { // public void run() { // try { // communicator().destroy(); // } catch(Ice.LocalException ex) { // ex.printStackTrace(); // } // } // } public int run(String[] args) { if (logger.isDebugEnabled()) { logger.debug("run(String[]) - start"); //$NON-NLS-1$ } if (args.length > 0) { System.err.println(appName() + ": too many arguments"); if (logger.isDebugEnabled()) { logger.debug("run(String[]) - end"); //$NON-NLS-1$ } return 1; } if (interrupted()) { System.out.println(appName() + ": terminating"); } Ice.ObjectAdapter adapter = Application.communicator() .createObjectAdapter("zhz"); // 这里的Span要和Server.config里的配置对应 adapter.add(new PersonInterI(), Application.communicator() .stringToIdentity("test"));// 我们可以定义多个ID,这样也是没问题的,客户端找哪个Identity都可以。不过一般不这么用。 adapter.activate(); // 激活Servant communicator().getLogger().print("Span Server is start ...");// 这里调用插件 communicator().waitForShutdown(); if (logger.isDebugEnabled()) { logger.debug("run(String[]) - end"); //$NON-NLS-1$ } return 0; } public static void main(String[] args) { if (logger.isDebugEnabled()) { logger.debug("main(String[]) - start"); //$NON-NLS-1$ } Server app = new Server(); int status = app.main("Server", args, "server.properties"); // 这里的配置文件没有写对应路径,所以运行程序的时候,要将配置文件打到ClassPath中 System.exit(status); if (logger.isDebugEnabled()) { logger.debug("main(String[]) - end"); //$NON-NLS-1$ } } }
PersonInterI.java
package test; import org.apache.log4j.Logger; import Ice.Current; import com.demo.zhz.Person; import com.demo.zhz._PersonInterDisp; public class PersonInterI extends _PersonInterDisp { /** * Logger for this class */ private static final Logger logger = Logger.getLogger(PersonInterI.class); @Override public void sendUser(Person p, Current __current) { if (logger.isDebugEnabled()) { logger.debug("sendUser(Person, Current) - start"); //$NON-NLS-1$ } System.out.println("Person = "+p.name+":"+p.password); if (logger.isDebugEnabled()) { logger.debug("sendUser(Person, Current) - end"); //$NON-NLS-1$ } } @Override public Person returnPerson(Current __current) { // TODO Auto-generated method stub return null; } }
个人认为跨语言有必要使用,如果都是java应用的话,不觉得没有必要,毕竟java的远程调用方式比较多。
以上例子需要安装slice2java的eclipse插件。。
发表评论
-
eclipse Resource 资料
2016-11-15 16:51 626IWorkspace/IWorkspaceRoot/IPro ... -
.docker/machine/machines/default/ca.pem: no such file or directory
2016-09-06 15:59 894Was doing adocker-machine env ... -
list.AddAll 去重复
2015-09-11 12:01 5931问题描述: 有List A和B,A、B中元素都是可保证 ... -
eclipse 插件开发 Setting the Java build path
2014-06-04 11:00 1225JDT Plug-in Developer Guide & ... -
xstream 下划线_问题
2013-12-30 10:18 4192最近在使用xtream 1.4.3,出现了如下的问题: ... -
RCP MessageConsole设置显示的最大行数
2013-09-05 11:34 990MessageConsole.setWaterMarks(5 ... -
freemarker 自定义freeMarker标签
2013-08-12 16:09 3892import java.io.IOException; i ... -
xstream javabean设置属性默认值的问题
2013-04-24 09:54 6574在xstream反序列化使用过程中发现,如果xml无该属 ... -
在使用xstream反序列化时遇到的问题
2013-04-24 09:42 1755public abstract class SBase { ... -
RCP 知识点
2013-03-14 15:10 1015获得工作区的所有工程: //获得workspace的所有 ... -
RCP FileSystem 文件系统
2013-02-19 10:42 1387public static File toLocalFile ... -
json转为Map
2013-01-19 22:27 32839package digu.pendant.util; ... -
eclipse4.x 去掉quick access
2013-01-11 14:57 4068/** * 去掉quick access * ... -
xstream 的高级用法,自定义输出结构
2012-12-19 14:35 2432public static void main(Stri ... -
jdt 核心知识
2012-11-27 21:39 1300jdt官方核心知识...................... ... -
jdt 创建java工程,生成代码,运行main方法
2012-11-27 10:50 2366public static IJavaProje ... -
两个osgi的例子程序
2012-11-20 10:21 1106osgi的例子....................直接上代 ... -
jfreechart 的官方例子,很全
2012-11-20 10:19 952jfreechart的官方的demon,很全。 -
SWT 隔行换色-自动宽高调整
2012-10-16 17:32 1721** * 创建:ZhengXi 2009-8-4 */ ... -
RCP 为action添加操作进度条
2012-10-16 13:59 1304public class StartAction extend ...
相关推荐
ICE(Internet Communication Engine)框架是一种跨平台的中间件,它提供了分布式系统开发所需的各种服务,如对象间通信、数据序列化、远程调用等。在C++编程环境中,ICE为开发者提供了一套强大的工具和库,使得构建...
它提供了一种面向对象的、类型安全的远程调用协议,同时支持TCP/IP、HTTP、SSL等多种网络协议,确保了数据传输的安全性和可靠性。 ### 安装与配置 首先,你需要下载并安装ICE 3.4.1。解压后,将ICE的库文件添加到你...
`Ice` 使用接口代理(Interface Proxy)机制,允许客户端透明地调用远程对象的方法,仿佛这些方法是在本地执行。这种透明性使得分布式编程变得简单,同时也支持多线程和异步调用,提高了系统的响应速度和并发能力。 ...
- **4.3.2 Ice::Application类**:服务器端程序的入口类。 - **4.3.3 Ice::Service类**:服务器端对象的基类。 - **4.3.4 接口映射**:服务器端接口的实现。 - **4.3.5 参数传递**:如何在服务器端处理参数传递。 - ...
8. **通知与推送**:讲解了如何使用Notification API向用户发送提醒,以及实现Google Cloud Messaging (GCM) 或 Firebase Cloud Messaging (FCM) 进行远程推送通知。 9. **多线程与异步操作**:介绍了Android中的...
在这个例子中,我们创建了一个名为 `WebService` 的类,并通过 `[WebMethod]` 特性标记了可被远程调用的方法。 3. **[ScriptService]**:这个特性使得 WebService 可以被 ASP.NET AJAX 或者 jQuery 等客户端脚本...
在上述C#代码中,`PageService`类使用了`[ScriptService]`特性,表明这是一个可以被AJAX调用的服务,而`[WebMethod]`特性标记的方法可以被远程调用。`WebMethod`接收的数据可以通过HTTP POST请求传递,返回值通常是...
4. **WebRTC API的兼容性封装**:由于不同浏览器对WebRTC的支持程度和命名有所不同,代码中进行了兼容性封装,确保了`PeerConnection`、`URL`和`getUserMedia`等API的统一调用。 5. **PeerConnection的初始化和管理...
20. **RPC组件**:远程过程调用,如RMI,gRPC。 21. **单点登录**:CAS,OAuth2等身份验证协议。 22. **NAT穿透**:STUN,TURN,ICE协议。 23. **邮件收发**:JavaMailSender,POP3,IMAP协议。 24. **应用服务器...
如果需要Service与Activity之间进行通信,比如传递参数或调用服务的方法,就需要使用绑定(bind)和解绑(unbind)的方式。这涉及到`onBind()`方法,服务需要返回一个实现了`Binder`接口的对象,使得Activity可以通过这...
PHPRPC是一个轻量级的PHP远程过程调用框架。它提供了一种更简洁的方式来实现Web服务。 **服务端实现**: 包含`phprpc_server.php`等必要的文件,创建服务器实例,添加服务方法,然后启动: ```php include_...