本文讲解了如何在HTTP协议下实现Java和C之间的交互,是一篇对Java的通信机制及与C API的集成思路探索的好文章。
一个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描述符文件
【修改引荐】
- PHP与Java集成开发详解
- 从VC++移植到GCC后的语法差异
- Java与C++编程的不同
知优网 » 浅谈Java的通讯机制及与C API的集成(java和c通信)