论坛首页 Java企业应用论坛

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

浏览 24746 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (2)
作者 正文
   发表时间:2011-02-09  
     由于是第一次采用这种开发方式,很多初级问题都需要解决,初步提出以下需要解决的问题:

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

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

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

1,使用IDHTTP组件
2,需要加密的字段自己加密解密即可
3,图文混排组件:RichView 和 rxlib库里的富文本组件,好象后者只有for delphi7版本

不建议图文混排,最好分开编辑保存
如果使用tomcat 做 server 中文url 和字段需要处理,我们一般用base64编码与解码中文
用xml or json 都应该没问题
0 请登录后投票
   发表时间:2011-02-09  
tiny_bird 写道
     由于是第一次采用这种开发方式,很多初级问题都需要解决,初步提出以下需要解决的问题:

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

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

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

1,使用IDHTTP组件
2,需要加密的字段自己加密解密即可
3,图文混排组件:RichView 和 rxlib库里的富文本组件,好象后者只有for delphi7版本

不建议图文混排,最好分开编辑保存
如果使用tomcat 做 server 中文url 和字段需要处理,我们一般用base64编码与解码中文
用xml or json 都应该没问题

图文混编是避免不了的,很多信息中间都要掺杂图片,有的甚至还有其它多媒体文件混编!
IdHttp组件不知道是否可以承载所有的数据交互,有的时候数据量特别的大,比如有一篇20万字的文章,是否可以通过IdHttp组件POST!
0 请登录后投票
   发表时间:2011-02-09  

综合上面各位的讨论,总结一下初步方案,是否可行需要进行实践论证:
1、客户端使用Delphi组件IdHttp进行数据交互,重新包装自己的协议,是的数据量最小化,去掉http一些头定义信息;

2、客户端和服务器端采用JSON数据格式进行数据交互,客户端将信息封装成JSON格式,服务器端解析该数据,同事,客户端的请求服务器也给予JSON数据返回,返回数据后,客户端自己解析JSON数据并生成相关的数据信息;

 

0 请登录后投票
   发表时间:2011-02-09  
GIS应用的话有没有考虑到二进制数据传输?

可以考虑Protocol Buffer
0 请登录后投票
   发表时间:2011-02-09  
xmlhttp足矣
0 请登录后投票
   发表时间:2011-02-09   最后修改:2011-02-09
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客户端的图文混编编辑器如何实现?


做技术的人往往偏激,或太追求技术的完美性,其实对于公司来说,要看的是开发效率和开发出的效果。 我看过了多位网友对楼主的回复,想说一下自己的意见:

 

认同一位网友的回复,“异构系统之间的交互,Web Service 才是王道”。是的。但是楼主却说Web Service太重量级了,我不知道楼主具体是说 Web Service那方面太重量级了。如果是说开发效率低,那就大错特错了,Java端可以用Apache的CXF,要让一个接口变成Web Service接口,只要给接口和实现类加上一个注解,在配置文件里加上一行配置就可以了。在Delphi端,用delphi的wsdl importer工具,自动生成调用Web Service的程序,就OK了,前后几分钟就搞定了。如果是说Web Service传输量大,我承认,是的,传一点东西,都要用一堆xml包起来。但是,我要问楼主,你的系统对于效率有多高的要求,你们系统的网络运行环境如何? 千万不可为了追求对用户看起来不起眼的性能提高而延长软件的开发周期,老板不喜欢你这样,吃力不讨好何必呢,不如省下时间陪老婆看看电影。

 

 

安全方面,web service的解决方案有不少资料,你可以在网上查查。

 

 

 

最后,我想说的是,建议楼主考虑一下flex,难道flex实现不了你们的需求吗,不知道你们用的是哪种地理信息系统平台,是超图,MapInfo,Arc Gis还是其他?问问你们地理信息系统平台的提供单位,看是否有flex下的前端组件。我用了几年delphi,发现他的开发效率不怎么样(我说的是复杂的系统,不是拖几个控件就能了事的),很重要的一条是对象需要手动释放,一个是程序员时刻要注意何时释放对象,再一个是因释放时机不对可能会引起程序错误。还有就是变量需要在一开头定义,当程序长时老是需要上下移动,真是麻烦。另外,用delphi的人越来越少(delphi迷会用砖头砸我,呵呵),资料也越来越少。 现在流行富客户端的应用,flex很出色,与java相结合很好,很强大,开发效率很高,我的老板很喜欢。

0 请登录后投票
   发表时间:2011-02-09  
鱼言风语 写道
GIS应用的话有没有考虑到二进制数据传输?

可以考虑Protocol Buffer



+1 可以自定义二进制协议,性能比ws什么的好很多
0 请登录后投票
   发表时间:2011-02-09  
qujianfeng 写道
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客户端的图文混编编辑器如何实现?


做技术的人往往偏激,或太追求技术的完美性,其实对于公司来说,要看的是开发效率和开发出的效果。 我看过了多位网友对楼主的回复,想说一下自己的意见:

 

认同一位网友的回复,“异构系统之间的交互,Web Service 才是王道”。是的。但是楼主却说Web Service太重量级了,我不知道楼主具体是说 Web Service那方面太重量级了。如果是说开发效率低,那就大错特错了,Java端可以用Apache的CXF,要让一个接口变成Web Service接口,只要给接口和实现类加上一个注解,在配置文件里加上一行配置就可以了。在Delphi端,用delphi的wsdl importer工具,自动生成调用Web Service的程序,就OK了,前后几分钟就搞定了。如果是说Web Service传输量大,我承认,是的,传一点东西,都要用一堆xml包起来。但是,我要问楼主,你的系统对于效率有多高的要求,你们系统的网络运行环境如何? 千万不可为了追求对用户看起来不起眼的性能提高而延长软件的开发周期,老板不喜欢你这样,吃力不讨好何必呢,不如省下时间陪老婆看看电影。

 

 

安全方面,web service的解决方案有不少资料,你可以在网上查查。

 

 

 

最后,我想说的是,建议楼主考虑一下flex,难道flex实现不了你们的需求吗,不知道你们用的是哪种地理信息系统平台,是超图,MapInfo,Arc Gis还是其他?问问你们地理信息系统平台的提供单位,看是否有flex下的前端组件。我用了几年delphi,发现他的开发效率不怎么样(我说的是复杂的系统,不是拖几个控件就能了事的),很重要的一条是对象需要手动释放,一个是程序员时刻要注意何时释放对象,再一个是因释放时机不对可能会引起程序错误。还有就是变量需要在一开头定义,当程序长时老是需要上下移动,真是麻烦。另外,用delphi的人越来越少(delphi迷会用砖头砸我,呵呵),资料也越来越少。 现在流行富客户端的应用,flex很出色,与java相结合很好,很强大,开发效率很高,我的老板很喜欢。


完全赞同这位朋友的说法,这个项目开始我也提议直接使用java做,做成B/S结构,我们的三维地理信息是自己写的,这个都不是问题,做成ActiveX控件就可以了,关键的一点是,这个项目参与开发人都不会Java,而且有人严厉排斥B/S模式,甚至严重排斥Java,不知道是为何!所以才准备使用Delphi、Java异构,现在看来,这样的开发模式也是行不通了,因为有人极力排斥Java,估计要全部用Delphi写了!

0 请登录后投票
   发表时间:2011-02-10  
1、没用过delphi,不会,想必不复杂。
2、https或http认证。twitter的OAUTH使用的是http的摘要认证。
3、嵌入browser,采用一些js富文本编辑器,和native code进行交互。盛大麦库的桌面客户端就是这种思路,富文本编辑器使用的是国人开发的KindEditor。
0 请登录后投票
   发表时间:2011-02-10  
10年前我原来的公司做过一个DELPHI+JAVA的C/B/S的类似应用,产品稳定性和扩展性都很好。

后来我做过一个VB+JAVA的类似的,也做起来了,只是项目没有推广。

我感觉,这种方式也是一种分支,应该会有一路技术走向这里。

一点经验:
1、HTTP通讯DELPHI当时用的是:ics,VB用的是:powerTcp  进行二次封装
2、数据结构当时用的是XML封装的类似于resultset的灵活的数据结构
3、通讯组件负责检查数据包大小,太大的就用zip压缩
4、不要随便去掉http传输头信息,会有问题
0 请登录后投票
论坛首页 Java企业应用版

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