`
erikchang
  • 浏览: 49390 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

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

    博客分类:
  • java
阅读更多

      好几年前,论坛中有讨论到采用“客户端用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客户端的图文混编编辑器如何实现?

分享到:
评论
42 楼 1526 2011-08-09  
还有人关注这种架构吗?本人非常感兴趣,有志同道合的qq联系,1519244298
41 楼 1526 2011-06-15  
这个思路很好,值得研究,现在b/s应用,性能是个大问题,
40 楼 kevin2003sk 2011-02-21  
公司做的是汽车行业的DMS系统,使用Delphi做客户端,服务端用java,协议是自定义的xml。 全国一半的乘用车4s店和维修站在使用。

已经成功使用了7年了,没啥问题。
39 楼 erikchang 2011-02-13  
数据交互准备采用json格式,现在有人提出使用MessagePack更好,没有了解过MessagePack,请有运用经验的朋友给予点评!
38 楼 mathgl 2011-02-13  
jjx 写道
习惯delphi的,大都无法接收web ui编程的那个性能和效率的,包括flex和silverlight都不行

从数据展示效果来说,silverlight现在远远比flex更适合程序员(不是设计人员),因为有一些第三方的控件,如devexpress/telerik/component one,这个是ms系的强项

当然silverlight现在性能我还是不满意,否则,是目前最好的ria工具

在分布式数据库应用上,delphi现在还是很强的,有许多方案,老实说并不需要用delphi+java这种低效率的东西,除了糊弄订单外,意义不大


delphi+java 很有可能是 client windows, server *nix的结构..如果都用windows..直接上delphi更方便..
37 楼 jjx 2011-02-13  
习惯delphi的,大都无法接收web ui编程的那个性能和效率的,包括flex和silverlight都不行

从数据展示效果来说,silverlight现在远远比flex更适合程序员(不是设计人员),因为有一些第三方的控件,如devexpress/telerik/component one,这个是ms系的强项

当然silverlight现在性能我还是不满意,否则,是目前最好的ria工具

在分布式数据库应用上,delphi现在还是很强的,有许多方案,老实说并不需要用delphi+java这种低效率的东西,除了糊弄订单外,意义不大
36 楼 moonlitsky 2011-02-12  
看了下楼主的需求,强烈建议用Flex + java,如果要 C / S结构,用Air(Flex)+Java.数据传输AMF(Blaze DS),

这套组合很适合你们的项目。靠谱地说。
35 楼 erikchang 2011-02-11  
wtusmchen 写道
1.支持用json或hessian传输,强烈建议不用WS,曾经在一个大型项目里用了不少WS,绝对是噩梦,这东西开发起来是简单,可是运行效率让人崩溃。再说json和hessian开发也很简单,又不需要你多写一句代码,开发效率与WS相当,运行效率高很多
2.以前用vb+java做过类似的,当时用的xmlhttp

赞同这位朋友的意见!
34 楼 wtusmchen 2011-02-11  
1.支持用json或hessian传输,强烈建议不用WS,曾经在一个大型项目里用了不少WS,绝对是噩梦,这东西开发起来是简单,可是运行效率让人崩溃。再说json和hessian开发也很简单,又不需要你多写一句代码,开发效率与WS相当,运行效率高很多
2.以前用vb+java做过类似的,当时用的xmlhttp
33 楼 sinopf 2011-02-11  
我用PHPRPC做过这样的实现,其实关键还是解决异构语言的通讯问题,网上很多相对成熟的解决方案。
32 楼 tiny_bird 2011-02-10  
idhttp post 数据流,20万字不算大,没问题的,post 16MB以下的数据没问题的,但要看网络带宽,因为你post是一个TMemory流,我post的字段含有word文档和pdf文档以及图像文件,我限制16mb上传容量,局域网应用没问题。

我的上一个工作单位,有项目采用 java(servlet+jaxb)(tomcat,hibernate等) + http(xml) + delphi(idhttp+NativeXml)
需要注意的是中文字段需要base64编码与web编程一样需要处理中文编码问题
31 楼 com1com4 2011-02-10  
不知道你们的Client需求如何,不考虑一下嵌个Chromium?扩展一下js接口,似乎没啥不能干的
这里有个项目可以考虑
http://code.google.com/p/delphichromiumembedded/
30 楼 johnyq 2011-02-10  
我的前一家公司采用的的架构和你差不多
客户端是VC,服务端用的java,
很早的一个版本采用的是webservice进行的通讯,后来处于性能某些特定环境的要求,进行了调整,需要找到一个比ws更轻量级的解决方案。
后来也在je上进行讨论,自己也对例如xmlrpc、hession、json等进行测试,最后的定下来的结果是我最不愿意看到的一个方案:按照json的数据描述方式生成字符串,弄了个四不像的东西,序列化和反序列化都有我们自己开发,中间也有数据加密和校验的机制,java端接收采用servlet,发送采用httpclient。
做下来发现采用http有几个要注意的地方:
1 安全性
2 如果要传输图片或者其他非文本的数据,在base64或者加密后,有些特殊字符要注意转义。
3 尽量不要将传输的数据结构复杂化,例如List Map 自定义对象的多层嵌套。
29 楼 longfeisoft 2011-02-10  
10年前我原来的公司做过一个DELPHI+JAVA的C/B/S的类似应用,产品稳定性和扩展性都很好。

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

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

一点经验:
1、HTTP通讯DELPHI当时用的是:ics,VB用的是:powerTcp  进行二次封装
2、数据结构当时用的是XML封装的类似于resultset的灵活的数据结构
3、通讯组件负责检查数据包大小,太大的就用zip压缩
4、不要随便去掉http传输头信息,会有问题
28 楼 zhc0822 2011-02-10  
1、没用过delphi,不会,想必不复杂。
2、https或http认证。twitter的OAUTH使用的是http的摘要认证。
3、嵌入browser,采用一些js富文本编辑器,和native code进行交互。盛大麦库的桌面客户端就是这种思路,富文本编辑器使用的是国人开发的KindEditor。
27 楼 erikchang 2011-02-09  
<div class="quote_title">qujianfeng 写道</div>
<div class="quote_div">
<div class="quote_title">erikchang 写道</div>
<div class="quote_div">
<p>      好几年前,论坛中有讨论到采用“客户端用delphi写,服务器端用java写”的异构语言方案,关于这个方案我看了很精彩,基本谈清了思路,缺少的是详细的解决方案以及代码实现!公司有个项目,客户端有很复杂的操作,尤其是三维地理信息的运用,完全使用B/S结构到目前为止基本不能实现客户的要求,介此,研究决定采用Delphi作为客户端,服务器端采用J2EE来实现,一来完成客户的需求,二来为下步全部升级为B/S结构做充分的准备工作!</p>
<p>      看了JE上对Delphi、Java异构语言做C/S结构的精彩讨论,初步决定Delphi、Java直接采用Json数据来交换数据,采用HTTP协议,可结合安全套接字实现交换数据安全性,服务器端通过json-rpc方式export远程调用接口,结合delphi indy session控件实现cookie机制。Java端采用Spring3+JPA作为基础结构,使用JabSorb作为交互基础框架,客户端采用Delphi Indy组件结合<a title="JSON Toolkit" href="http://www.progdigy.com/?page_id=6"><span style="color: #006699;">JSON Toolkit</span></a>框架完成JSON的数据解析。</p>
<p>     由于是第一次采用这种开发方式,很多初级问题都需要解决,初步提出以下需要解决的问题:</p>
<p>     1、Delphi如何像服务器端发送并读取数据;</p>
<p>     2、http协议是否能够满足数据的安全性</p>
<p>     3、delphi客户端的图文混编编辑器如何实现?</p>
</div>
<p><br>做技术的人往往偏激,或太追求技术的完美性,其实对于公司来说,要看的是开发效率和开发出的效果。 我看过了多位网友对楼主的回复,想说一下自己的意见:</p>
<p> </p>
<p>认同一位网友的回复,“异构系统之间的交互,Web Service 才是王道”。是的。但是楼主却说Web Service太重量级了,我不知道楼主具体是说 Web Service那方面太重量级了。如果是说开发效率低,那就大错特错了,Java端可以用Apache的CXF,要让一个接口变成Web Service接口,只要给接口和实现类加上一个注解,在配置文件里加上一行配置就可以了。在Delphi端,用delphi的wsdl importer工具,自动生成调用Web Service的程序,就OK了,前后几分钟就搞定了。如果是说Web Service传输量大,我承认,是的,传一点东西,都要用一堆xml包起来。但是,我要问楼主,你的系统对于效率有多高的要求,你们系统的网络运行环境如何? 千万不可为了追求对用户看起来不起眼的性能提高而延长软件的开发周期,老板不喜欢你这样,吃力不讨好何必呢,不如省下时间陪老婆看看电影。</p>
<p> </p>
<p> </p>
<p>安全方面,web service的解决方案有不少资料,你可以在网上查查。</p>
<p> </p>
<p> </p>
<p> </p>
<p>最后,我想说的是,建议楼主考虑一下flex,难道flex实现不了你们的需求吗,不知道你们用的是哪种地理信息系统平台,是超图,MapInfo,Arc Gis还是其他?问问你们地理信息系统平台的提供单位,看是否有flex下的前端组件。我用了几年delphi,发现他的开发效率不怎么样(我说的是复杂的系统,不是拖几个控件就能了事的),很重要的一条是对象需要手动释放,一个是程序员时刻要注意何时释放对象,再一个是因释放时机不对可能会引起程序错误。还有就是变量需要在一开头定义,当程序长时老是需要上下移动,真是麻烦。另外,用delphi的人越来越少(delphi迷会用砖头砸我,呵呵),资料也越来越少。 现在流行富客户端的应用,flex很出色,与java相结合很好,很强大,开发效率很高,我的老板很喜欢。</p>
</div>
<p><br>完全赞同这位朋友的说法,这个项目开始我也提议直接使用java做,做成B/S结构,我们的三维地理信息是自己写的,这个都不是问题,做成ActiveX控件就可以了,关键的一点是,这个项目参与开发人都不会Java,而且有人严厉排斥B/S模式,甚至严重排斥Java,不知道是为何!所以才准备使用Delphi、Java异构,现在看来,这样的开发模式也是行不通了,因为有人极力排斥Java,估计要全部用Delphi写了!</p>
26 楼 hypercube1024 2011-02-09  
鱼言风语 写道
GIS应用的话有没有考虑到二进制数据传输?

可以考虑Protocol Buffer



+1 可以自定义二进制协议,性能比ws什么的好很多
25 楼 qujianfeng 2011-02-09  
<div class="quote_title">erikchang 写道</div>
<div class="quote_div">
<p>      好几年前,论坛中有讨论到采用“客户端用delphi写,服务器端用java写”的异构语言方案,关于这个方案我看了很精彩,基本谈清了思路,缺少的是详细的解决方案以及代码实现!公司有个项目,客户端有很复杂的操作,尤其是三维地理信息的运用,完全使用B/S结构到目前为止基本不能实现客户的要求,介此,研究决定采用Delphi作为客户端,服务器端采用J2EE来实现,一来完成客户的需求,二来为下步全部升级为B/S结构做充分的准备工作!</p>
<p>      看了JE上对Delphi、Java异构语言做C/S结构的精彩讨论,初步决定Delphi、Java直接采用Json数据来交换数据,采用HTTP协议,可结合安全套接字实现交换数据安全性,服务器端通过json-rpc方式export远程调用接口,结合delphi indy session控件实现cookie机制。Java端采用Spring3+JPA作为基础结构,使用JabSorb作为交互基础框架,客户端采用Delphi Indy组件结合<a title="JSON Toolkit" href="http://www.progdigy.com/?page_id=6"><span style="color: #006699;">JSON Toolkit</span></a>框架完成JSON的数据解析。</p>
<p>     由于是第一次采用这种开发方式,很多初级问题都需要解决,初步提出以下需要解决的问题:</p>
<p>     1、Delphi如何像服务器端发送并读取数据;</p>
<p>     2、http协议是否能够满足数据的安全性</p>
<p>     3、delphi客户端的图文混编编辑器如何实现?</p>
</div>
<p><br>做技术的人往往偏激,或太追求技术的完美性,其实对于公司来说,要看的是开发效率和开发出的效果。 我看过了多位网友对楼主的回复,想说一下自己的意见:</p>
<p> </p>
<p>认同一位网友的回复,“异构系统之间的交互,Web Service 才是王道”。是的。但是楼主却说Web Service太重量级了,我不知道楼主具体是说 Web Service那方面太重量级了。如果是说开发效率低,那就大错特错了,Java端可以用Apache的CXF,要让一个接口变成Web Service接口,只要给接口和实现类加上一个注解,在配置文件里加上一行配置就可以了。在Delphi端,用delphi的wsdl importer工具,自动生成调用Web Service的程序,就OK了,前后几分钟就搞定了。如果是说Web Service传输量大,我承认,是的,传一点东西,都要用一堆xml包起来。但是,我要问楼主,你的系统对于效率有多高的要求,你们系统的网络运行环境如何? 千万不可为了追求对用户看起来不起眼的性能提高而延长软件的开发周期,老板不喜欢你这样,吃力不讨好何必呢,不如省下时间陪老婆看看电影。</p>
<p> </p>
<p> </p>
<p>安全方面,web service的解决方案有不少资料,你可以在网上查查。</p>
<p> </p>
<p> </p>
<p> </p>
<p>最后,我想说的是,建议楼主考虑一下flex,难道flex实现不了你们的需求吗,不知道你们用的是哪种地理信息系统平台,是超图,MapInfo,Arc Gis还是其他?问问你们地理信息系统平台的提供单位,看是否有flex下的前端组件。我用了几年delphi,发现他的开发效率不怎么样(我说的是复杂的系统,不是拖几个控件就能了事的),很重要的一条是对象需要手动释放,一个是程序员时刻要注意何时释放对象,再一个是因释放时机不对可能会引起程序错误。还有就是变量需要在一开头定义,当程序长时老是需要上下移动,真是麻烦。另外,用delphi的人越来越少(delphi迷会用砖头砸我,呵呵),资料也越来越少。 现在流行富客户端的应用,flex很出色,与java相结合很好,很强大,开发效率很高,我的老板很喜欢。</p>
24 楼 jimzhao 2011-02-09  
xmlhttp足矣
23 楼 鱼言风语 2011-02-09  
GIS应用的话有没有考虑到二进制数据传输?

可以考虑Protocol Buffer

相关推荐

Global site tag (gtag.js) - Google Analytics