论坛首页 Java企业应用论坛

重新讨论一个老话题Delphi+Java做C/S结构,期望在这里形成一个比较好的解决方案及具体实现(开篇)

浏览 24744 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (2)
作者 正文
   发表时间:2011-02-08  
flashing 写道
json是给浏览器用的,这种情况的异构系统交互,并且你打算将来让浏览器也可以交互,ws才是正道。
当然了,如果不打算兼容浏览器了,各种更高效的通信框架一大把呢,ice或者干脆google protobuf


ICE没有对delphi的直接支持。最近乎的是c++ builder..版本还不能太旧了....
0 请登录后投票
   发表时间:2011-02-08  
erikchang 写道
kimmking 写道
erikchang 写道

      好几年前,论坛中有讨论到采用“客户端用delphi写,服务器端用java写”的异构语言方案,关于这个方案我看了很精彩,基本谈清了思路,缺少的是详细的解决方案以及代码实现!公司有个项目,客户端有很复杂的操作,尤其是三维地理信息的运用,完全使用B/S结构到目前为止基本不能实现客户的要求,介此,研究决定采用Delphi作为客户端,服务器端采用J2EE来实现,一来完成客户的需求,二来为下步全部升级为B/S结构做充分的准备工作!

      看了JE上对Delphi、Java异构语言做C/S结构的精彩讨论,初步决定Delphi、Java直接采用Json数据来交换数据,采用HTTP协议,可结合安全套接字实现交换数据安全性,服务器端通过json-rpc方式export远程调用接口,结合delphi indy session控件实现cookie机制。Java端采用Spring3+JPA作为基础结构,使用JabSorb作为交互基础框架,客户端采用Delphi Indy组件结合JSON Toolkit框架完成JSON的数据解析。

     由于是第一次采用这种开发方式,很多初级问题都需要解决,初步提出以下需要解决的问题:

     1、Delphi如何像服务器端发送并读取数据;

     2、http协议是否能够满足数据的安全性

     3、delphi客户端的图文混编编辑器如何实现?


1、建议直接用ws或rest 2、使用ssl或者 ws-security 两方面的安全性,基于用户权限的访问,传输过程的加密 3、嵌入一个webbrower之类的activex

 1、不看好webservices,太重量级了,很多事情复杂化了,这样不利于软件开发进度控制,rest呢,应该是居于B/S的吧

 2、安全方便考虑采取证书,同时在服务器端采用Spring Security控制权限,应该能够满足要求

 3、拒绝ActiveX

 

看了一下Indy组件,同时做了一些小尝试,初步看来,使用IdHttp组件可以完成表单的Post功能,JSON-RPC可以在客户端解析,没有做大量数据的测试,期待有过类似经验者给予指导!

这个思路可以,有公司的CS产品是这么做的,有7、8年应用历史了。最早服务端还是php,后来开发了java版。

性能和稳定性不错。

自己包装开发一个delphi的http组件,用post与java服务器通信。delphi要注意多线程的处理,服务端用jsp或servlet接收都行,协议简单点,能识别key-value对就基本够用了,复杂点可以带上数据类型,或者用hessian协议,再包装包装用反射实现自动数据拆包解包等等。

至于安全,可以用类似bluefish这样的对称加密算法对二进制流加密,密钥可以是事先分发好的,也可以是通过非对称加密协商确定。

 

0 请登录后投票
   发表时间:2011-02-08  
erikchang 写道

      好几年前,论坛中有讨论到采用“客户端用delphi写,服务器端用java写”的异构语言方案,关于这个方案我看了很精彩,基本谈清了思路,缺少的是详细的解决方案以及代码实现!公司有个项目,客户端有很复杂的操作,尤其是三维地理信息的运用,完全使用B/S结构到目前为止基本不能实现客户的要求,介此,研究决定采用Delphi作为客户端,服务器端采用J2EE来实现,一来完成客户的需求,二来为下步全部升级为B/S结构做充分的准备工作!

      看了JE上对Delphi、Java异构语言做C/S结构的精彩讨论,初步决定Delphi、Java直接采用Json数据来交换数据,采用HTTP协议,可结合安全套接字实现交换数据安全性,服务器端通过json-rpc方式export远程调用接口,结合delphi indy session控件实现cookie机制。Java端采用Spring3+JPA作为基础结构,使用JabSorb作为交互基础框架,客户端采用Delphi Indy组件结合JSON Toolkit框架完成JSON的数据解析。

     由于是第一次采用这种开发方式,很多初级问题都需要解决,初步提出以下需要解决的问题:

     1、Delphi如何像服务器端发送并读取数据;

     2、http协议是否能够满足数据的安全性

     3、delphi客户端的图文混编编辑器如何实现?

1、可以自己处理,走socket或http协议,Indy或者ICS都可以;也有现成的中间件,比如:remobjects,很强大

2、http协议的安全可以通过对数据加密或走https

3、有些控件可以用

0 请登录后投票
   发表时间:2011-02-08  
首先感谢楼上各位朋友的回复,我首先肯定了我的开发结构是很可可取的!我开始怀疑是不是使用一个IdHttp组件就可以完成Get/Post,客户端和服务器端使用JSON数据进行交互,这样就保证数据量最小化,同时也能缓解网络流量的问题,我不知道这样的思路会有哪些弊端,请各位同仁给予经验上的指导!谢谢
0 请登录后投票
   发表时间:2011-02-08   最后修改:2011-02-08
jjx 写道
前年做过一个delphi +python django的原型,使用的是delphi superobject +ms xmlhttprequest, lz第一个问题应该没什么问题。 这个连接可以参考一下 http://theroadtodelphi.wordpress.com/2010/12/04/using-the-google-translate-api-v2-labs-from-delphi/

第二个问题可以通过自定义协议/https或使用一些第三方的协议,如phprpc之类的.这个安全处理理论上同浏览器中用js调用服务端所需要的安全处理是类似的

第三绝对是delphi的强项,我知道的有richview和wptools,其他的应该还有很多,既然用delphi了,嵌入office都不是问题了


会话就很简单了,自己处理也一样,无非是在服务器端维护一个guid的列表,在所有的方法中传递guid而已(通过类体系简化这个操作)


另外,delphi的数据绑定体系主要是tdataset,所以你要建立个自定义的jsondataset来处理绑定,最好能抽象化并同服务器端数据更新结合起来,这可能需要几天的工作量,不过以后就轻松了


不过我最后还是使用的全delphi方案,用了activeform+桌面和remobjects dataabstract,使用了动态编译程序下载的模式,维护不同语言感觉会很累


图文混编应该是桌面应用的一个弱项吧,嵌入office,也需要本地安装office支持,最好的是DSOFramer控件,而这个控件还存在bug,笔者已经重写了DSOFramer控件,这需要本地Office支持,不是好的解决方案,不知道有没有其他好的解决办法!


============================
同时希望投了隐藏贴的朋友给我指导,这样的技术方案应该是很成熟的,但网络上没有很好的解决方案,不知道这位朋友为什么投了隐藏贴,可能是很高很高的人,不过更大的是一个垃圾人,呵呵,除非他给大家一个很完美的解决方案和代码实践,否则大家一起鄙视他这个垃圾人!
0 请登录后投票
   发表时间:2011-02-08  
现在公司就在用,很稳定,支持客户端也比以前midas的多。。而且可以和TClientDataSet完美结合。
0 请登录后投票
   发表时间:2011-02-08  
1、Delphi如何像服务器端发送并读取数据;
服务器端是java,通过xmlrpc来实现,客户端将生成的sql语句发送到服务器端,服务器端执行sql,结构通过xmlrpc返回,这是早期,现在可以采用json来实现

2、http协议是否能够满足数据的安全性
delphi和java共用一套加解密的算法,没有可以找我

3、delphi客户端的图文混编编辑器如何实现?
delphi客户端可以将文件保存成xml结构文件的形式(具体数据生成压缩包),将文件上传,服务器端接受到此种文件按规则进行解析处理。
0 请登录后投票
   发表时间:2011-02-08  
试试phprpc
0 请登录后投票
   发表时间:2011-02-09  
我们公司的产品曾经采用的架构和楼主描述的差不多,只不过前端应用没有那么复杂而已。

前端,我们采用delphi做客户端,前后通信使用我们自己实现的一套通信协议,其实也就是对http协议进行了简化,以数据通信为目的,把一些不要用的http信息头去掉,另外进行了压缩和加密。

后端采用spring为核心的java技术实现。
0 请登录后投票
   发表时间:2011-02-09  
个人也觉得嵌入office不如嵌入webbrower。

一般来说.net c++很多流程,图文混排,都是这个思路。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics