跪求大佬对java web项目与桌面应用数据交互方面给予指导!

梵高Sakalaka 发布于 2018/04/23 21:49
阅读 891
收藏 4

    最近在做一个java web项目,其中有个模块,需要在web项目中点击某个按钮的时候向一个桌面应用程序(另一个团队使用C/C++写的程序)发送一个指令。说到底就是javaweb项目中向C/C++项目发送一个字符串。

    本人才疏学浅,技术范围仅限于对java web项目的开发,对于web项目与桌面应用的数据交互问题从未涉及,还望哪位大佬简单指引下思路:是应该由桌面应用提供一个接口,我这边调用接口将数据传输过去?还是说我这边使用JNI什么的做出什么东西供C/C++那边调用读取数据?还请大佬们给小弟一点指导,对这个真没什么概念,先谢过各位大佬了!

加载中
1
kakai
kakai

要么使用http要么使用socket,可能C/C++的socket库比较多,http的相对较少,这个咨询对方,对方怎么方便怎么来,不过socket传输数据需要注意粘包断包的问题,http则不需要考虑。 还有一种方案就是用redis的消息队列机制,javaweb端作为消息发布者,C/C++那边作为消息订阅者,两边都可以利用现有的redis客户端相互处理数据,不需要自己写过多的与网络通信相关的代码,具体redis怎么部署,你们可以协商讨论。

梵高Sakalaka
梵高Sakalaka
今天和C++项目组碰了下,您说的确实是对的。昨晚提问以后自己找了些资料,使用socket写了一个向C++服务器发送指令的demo。但今天与其对接后,对方的回复与您说的出奇一致。对方指出了socket通信的粘包断包问题并表示希望web端使用web socket向其发送指令。说web socket相比于socket将不会导致粘包断包问题。我猜他就是想说使用http进行数据传输吧……
1
sxgkwei
sxgkwei

别听什么 JNative 啊,消息队列啊,socket,http啊之类的胡扯。

首先,你得搞清楚,你这个功能,不是你的java web的服务器端和人家的 C++的程序通信。也就是说,这个东西,不是服务器之间的相互通信。

那么这个东西是啥呢?

这个C++的程序,是安装在安装浏览器的这个用户的电脑里面的。

这个东西,就是浏览器里面你们的用户,点击一个浏览器上的html代码写出的一个按钮,然后,在这个C++程序已经启动的情况下,调用它的某个功能,或者在没启动的情况下,启动它,调用某个功能。

搞懂你要努力达成的方向,你才能走上正确的道路。

在这个前提下,你能使用的语言是什么,或者唯一能使用的语言是什么?没错,只有 javascript 语言,所以说,回答的很多人都在鬼扯。

那么,javascript 语言怎么调用浏览器外部的程序呢?浏览器安全机制告诉我们,浏览器这是一个沙盒,你是调用不到外面去的。那么,怎样能调用到外面去呢?

只能IE的 activeX 控件。只能谷歌的 ocx 控件。到了这一步,方法就很明显了。如果客户群体浏览器可以决定,那么就让 C++ 组针对性开发一种插件即可;如果不能,只能2种都开发。开发的插件呢,留出对外调用接口说明文档给你,你再用 js 调用这些插件的接口即可实现目标功能。

Carliels
Carliels
此楼正解
sxgkwei
sxgkwei
回复 @Daisygeo : 这种情况下。不要考虑 @BoXuan 提到的 socket 通信方案,java做这个事情费劲而且资料少出问题不好找。直接使用 @BoXuan 提到的 redis 方案,java 有现成的jar包直接可以往 redis 数据库写数据,想必对方肯定能找到 C++ 的对应工具包,直接读取数据。这样即可直接通信。
梵高Sakalaka
梵高Sakalaka
非常感激您花时间用这么大篇幅向小弟传授解决此问题的一步步思路和最终所有的解决方案。是这样,目前的需求并非是桌面应用和web应用安装在一台客户机上,而是用户点击web系统中按钮后服务器做出处理,向C++系统的服务器发出一个指令。然后C++系统的服务器向C++客户端发送讯息。不过,最后仍然非常感激您,思路和方案让我顿时大开眼界。
kakai
kakai
给你顶了一下,虽然赞同你的,但如果其它电脑上的用户操作也要改变每个用户C/C++程序中数据显示,那么还是用网络通信比较好。如果特定的自己网页操作改变自己电脑上的C/C++行为,那么你说的当然是合理的。不过就算是你说的这种情况,用网络通信照样是能实现的,而且不管是技术难度和复杂度方面考虑,无需编写额外的浏览器插件,而且插件又得调用C/C++程序接口。
0
M
MuziL
用c++开发个ocx控件,或者让他们提供
一号男嘉宾
一号男嘉宾
正解
0
泷涯SY
泷涯SY
建议自己定一个远程调用协议,TCP也好,UDP也好,甚至HTTP都可以
0
ODMark
ODMark
看一下JNative能否满足你需求?
0
公孙二狗
公孙二狗

也可以考虑消息队列,RabbitMQ 有 Java 和 C++ 的 API

b
bingtel
单机通信 用MQ太重啦
0
Joyzhou
Joyzhou

建议使用消息中间件通信

0
元谷
元谷
最简单的方法就是外包给我。哈哈
返回顶部
顶部