`
evget
  • 浏览: 144633 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
文章分类
社区版块
存档分类

Java中的通信机制及与C/C API的集成

阅读更多
文章关键字:|Java|通信|机制|C/C API|集成|C语言|中间件|插件|管理|CGI|

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

  思路:

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

通过URL,Applet/JWS访问被影射到URL的动态资源(Servlet)
通过URL,Applet/JWS访问共享的静态资源(Server定期更新静态资源)
通过序列化和反序列化,实现简单对象的传输(比如Resin的Hessian框架就提供了这种通信的方式)
通过一些工具做代码生成,利用Web Services实现客户端和服务端的交互
  此外脱离HTTP,还可以做RMI,socket编程。现在问题是通信的一端由Java变成了C/C++, 于是, 解决方案1需要把动态资源由CGI来定义,而方案3变得不再适用。于是方案有:

通过URL,Applet/JWS访问被影射到URL的动态资源(CGI)
通过URL,Applet/JWS访问共享的静态资源(Server定期更新静态资源)
通过一些工具做代码生成,利用Web Services实现客户端和服务端的交互(×××这是我们讨论的重点×××)
  解决方案:现在针对上文提出的3中通信方式中的1和3谈一谈实现的方法,2的实现方案比较灵活,需要发挥大家的想象力了:

  针对CGI:

  首先CGI可以配置在各种主流的服务器中作为后端的脚本运行。大家可能对Servlet更熟悉一些。CGI可以用脚本写,也可以用C来实现。CGI被触发后,通过系统的环境变量来获得输入,在处理完毕后向标准输出中输出结果。

  由此可以想见,Web服务器在接受到来自HTTP协议的请求后,首先把请求的参数获取到,然后设置到环境变量里。根据对访问的URL的解析和服务器自身的配置,找到服务于请求的CGI程序的位置,然后执行这个程序。

  这个程序被执行后通过环境变量得到了服务器先前设置在环境变量中的参数。在经过一些复杂的逻辑操作后,向标准输出输出结果。这个输出又被Web服务器所捕获,转而传递回请求的客户端。更多关于CGI的知识和理解,大家可以通过google来寻找答案。

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

需要自己制定类型传输协议,做封装和拆封,否则只支持字符串
我们不会为了要用C的API就给它装一个或者自己实现一个Web服务器的,这让我们的底层程序显得蠢笨而冗余。我们希望能有一个超薄的Server外壳,在对API封装后,通过某个端口进行开放即可。
  针对Web Servcies:

  Based on上面的两个不足,我们只能把希望寄托在Web Services身上了,笔者在这里推荐给大家的是在C/C++很著名的Web Services工具gSOAP。

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

一个Stand-alone的服务器外壳
一个根据API程序自动生成的Web Services服务
一个WSDL描述符文件


原文地址:http://www.evget.com/zh-CN/Info/ReadInfo.aspx?id=9245
分享到:
评论

相关推荐

    使用java调用jenkins api

    Java调用Jenkins API是一个常见的自动化任务执行场景,特别是在持续集成和持续部署(CI/CD)流程中。Jenkins作为一个开源的持续集成工具,提供了丰富的API接口,允许开发者通过编程方式与Jenkins服务器进行交互。...

    Java-api-mac

    Java-API-Mac可能提供了与Core Foundation的桥梁,使得Java应用可以访问这些服务,如文件系统操作、网络通信、线程管理等。 4. **事件处理**:Java-API-Mac可能会扩展Java的事件模型,以适应Mac OS X的事件处理机制...

    java集成webkit浏览器

    具体实现过程中,Java开发者会使用如DJNativeSwing这样的第三方库,它提供了一个桥接机制,使得Java可以直接调用WebKit的C/C++接口。DJNativeSwing-SWT.jar是这个库的一部分,专门用于在SWT应用中集成WebKit。...

    redmine-java-api

    2. **java**:这里的Java指的是编程语言,它被用于开发redmine-java-api,使得开发者可以使用Java语言与Redmine进行集成。 3. **restapi**:REST(Representational State Transfer)是一种网络应用程序的设计风格和...

    Java-ipfs-api

    Java-ipfs-api 使Java程序员能够轻松地将IPFS的功能集成到他们的应用程序中,无需深入了解IPFS底层的工作原理。这个API提供了诸如添加、检索、搜索和管理IPFS中的文件和目录等基本操作。下面我们将深入探讨该库的...

    google-api-translate-java(Java 语言对Google翻译引擎的封装类库).7z

    Google翻译API提供了强大的多语言翻译能力,而`google-api-translate-java`则是针对Java开发者的一个封装库,方便他们在Java应用中集成Google翻译服务。这个7z压缩包包含的正是这个Java库,它允许开发者通过简单的...

    海康威视 java B/S SDK 完美无瑕(开发包demo无源码)

    1. **Java SDK集成**:海康威视提供的Java SDK包含了一系列的API,用于与设备进行通信。这些API可能包括设备的连接、身份验证、视频流获取、云台控制等功能。开发者需要根据SDK文档,学习如何初始化API,设置必要的...

    无人机后端开发java无人机后端开发java

    Java的并发API(如ExecutorService、Future、Callable、Thread)可帮助开发者构建高效的并发处理机制,确保系统的响应速度和稳定性。 4. **数据处理与存储** 无人机产生的数据量巨大,需要高效的数据处理和存储...

    ElasticSearch Java API

    - **易于集成**: 由于Java API与Java语言紧密结合,使得在Java应用中集成Elasticsearch变得非常方便。 - **灵活性**: 提供了对Elasticsearch所有功能的访问,可以实现复杂的查询和分析需求。 - **错误处理**: 自动...

    java调用api的方法

    Java作为一种广泛使用的编程语言,提供了多种方式来调用API,实现不同服务之间的数据交换和功能集成。本篇文章将详细探讨如何使用Java来调用API,以及相关的重要知识点。 首先,理解API的基本概念至关重要。API是一...

    Java版 Steam API源码

    Java版的Steam API源码是Java开发者用于与Valve公司的Steam平台进行交互的工具,它允许程序员通过编程方式访问Steam的各类数据和服务。这个开源项目主要用于处理与Steam社区相关的任务,例如获取用户信息(包括...

    Java后台微信企业转账到零钱

    通过以上分析,我们可以看出,实现“Java后台微信企业转账到零钱”涉及到了微信支付API的集成、签名算法的应用、请求参数的构造、错误处理策略以及后台系统的设计等多个技术环节。每个环节都需要精确无误地实现,以...

    impinj Reader 的java开发API

    在使用这个SDK时,开发者需要了解RFID的基本原理,熟悉Java编程,以及理解如何将API集成到自己的项目中。同时,通过阅读SDK的文档,开发者可以获得关于如何使用各个方法和类的详细指导,以便有效地利用这些工具进行...

    基于Java的USB-HID设备通信设计与实现.pdf

    【Java调用USB-HID设备通信】在Java中直接与USB-HID(Human Interface Device)设备通信是一项挑战,因为Java语言本身不支持指针。为了克服这一难题,开发者可以利用第三方框架,比如JNative,来实现在Windows平台上...

    icbc-api-sdk-cop_v2_20210224.zip

    1. **环境配置**:首先,开发者需要根据"config"中的配置文件设置API的访问密钥、接口地址等信息,确保与工行服务器的通信安全。 2. **引入依赖**:将"lib"目录下的jar包导入到开发环境中,如Eclipse或IntelliJ ...

    ArcGIS Flex API和Java API的集成

    通过将ArcGIS Flex API与Java API集成,不仅可以充分利用Flex在前端展示方面的优势,还能借助Java的强大处理能力实现复杂的空间数据分析与处理。而BlazeDS作为两者之间高效通信的桥梁,使得整个系统的构建更为灵活、...

    JavaUHF_RFIDUHF_java_

    在开发过程中,必须考虑硬件错误、通信中断等情况,因此良好的异常处理机制是必要的。JavaUHF库应提供丰富的异常类,帮助开发者捕获和处理各种问题。 八、性能优化 为了实现高性能的RFID应用,开发者需要关注数据...

    Java编程环境及API帮助文档

    在本压缩包"学生机环境-Java编程环境及API帮助文档"中,包含了搭建完整Java开发环境所需的所有元素,特别是针对初学者的教育环境。 首先,Java Development Kit (JDK) 是开发和运行Java应用程序的核心组件。它包含...

    华为短信api的java源码

    华为短信API的Java源码是用于与华为短信服务进行交互的一种开发工具,它允许开发者通过编程方式发送、接收和管理短信。在这个压缩包中,可能包含的文件是`smproxy`,这通常是一个代理服务器或者中间件,用于处理与...

    顺丰快递API接口(Java端)

    顺丰快递API接口是针对开发者设计的一套用于集成顺丰快递服务的Java端开发工具包,它允许程序员通过编程方式与顺丰的物流系统进行交互,实现诸如下单、查询快递状态、获取轨迹信息等一系列功能。这个API接口主要面向...

Global site tag (gtag.js) - Google Analytics