浅谈Java的通信机制及与C API的集成
创始人
2024-03-20 04:21:28
0

一个C语言开发的中间件,通过API暴露给二次开发及插件应用。现在由于对其应用的需求变得日趋复杂,而且正在脱离Unix的管理环境,走向基于JWS这样的BCS管理。有朋友推荐我用JNI,但这样一是增加了耦合度,二是让Java睡在JNI感觉不太安稳。在认知了上下两层的系统平台后,问题变得明朗起来:如何在HTTP协议下实现Java和C之间的交互?

思路:

先从Java的角度入手,Java间的通信方法:

1 通过URL,Applet/JWS访问被影射到URL的动态资源(Servlet)

2 通过URL,Applet/JWS访问共享的静态资源(Server定期更新静态资源)

3 通过序列化和反序列化,实现简单对象的传输(比如Resin的Hessian框架就提供了这种通信的方式)

4 通过一些工具做代码生成,利用Web Services实现客户端和服务端的交互

此外脱离HTTP,还可以做RMI,socket编程

现在问题是通信的一端由Java变成了C/C++, 于是, 解决方案1需要把动态资源由CGI来定义,而方案3变得不再适用。于是方案有:

1 通过URL,Applet/JWS访问被影射到URL的动态资源(CGI)

2 通过URL,Applet/JWS访问共享的静态资源(Server定期更新静态资源)

3 通过一些工具做代码生成,利用Web Services实现客户端和服务端的交互
  
解决方案:

现在针对上文提出的3中通信方式中的1和3谈一谈实现的方法,2的实现方案比较灵活,需要发挥大家的想象力了:)

针对CGI:

首先CGI可以配置在各种主流的服务器中作为后端的脚本运行。大家可能对Servlet更熟悉一些。

CGI可以用脚本写,也可以用C来实现。CGI被触发后,通过系统的环境变量来获得输入,在处理完毕后向标准输出中输出结果。

由此可以想见,Web服务器在接受到来自HTTP协议的请求后,首先把请求的参数获取到,然后设置到环境变量里。

根据对访问的URL的解析和服务器自身的配置,找到服务于请求的CGI程序的位置,然后执行这个程序。

这个程序被执行后通过环境变量得到了服务器先前设置在环境变量中的参数。在经过一些复杂的逻辑操作后,向标准输出输出结果。

这个输出又被Web服务器所捕获,转而传递回请求的客户端。

更多关于CGI的知识和理解,大家可以通过google来寻找答案

上述CGI的方式可以让我们直接获取到结果,但是方案比较原始和基础。其缺点有:

1 需要自己制定类型传输协议,做封装和拆封,否则只支持字符串

2 我们不会为了要用C的API就给它装一个或者自己实现一个Web服务器的,这让我们的底层程序显得蠢笨而冗余。我们希望能有一个超薄的Server外壳,

在对API封装后,通过某个端口进行开放即可。

针对Web Servcies:

Based on上面的两个不足,我们只能把希望寄托在Web Services身上了,

笔者在这里推荐给大家的是在C/C++很著名的Web Services工具gSOAP。

通过这个工具,我们可以做到:

1 一个Stand-alone的服务器外壳

2 一个根据API程序自动生成的Web Services服务

3 一个WSDL描述符文件

【编辑推荐】

  1. PHP与Java集成开发详解
  2. 从VC++移植到GCC后的语法差异
  3. Java与C++编程的不同

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...