`
erikchang
  • 浏览: 50654 次
  • 性别: 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

相关推荐

    delphi客户端+JAVA服务端

    在IT行业中,Delphi客户端与Java服务端的数据传输是一个常见的跨平台通信问题。Delphi,一个基于Object Pascal的集成开发环境(IDE),常用于构建高性能的桌面应用程序,而Java则是一种广泛使用的、跨平台的编程语言...

    三层架构Delphi+Java+Oracle模式的实现

    ### 三层架构Delphi+Java+Oracle模式的实现 #### 架构简介 该架构采用的是典型的三层架构设计,具体来说是以Delphi作为客户端、Java作为应用服务端、Oracle作为后台数据库的一种组合形式。这样的设计既能够发挥各...

    java与delphi结合

    - **JNI(Java Native Interface)**:Java通过JNI调用Delphi编写的本地库,实现对C/C++接口的调用。Delphi程序可以作为Java的本地库,提供性能优化或特定平台的功能支持。 - **COM/ActiveX**:Delphi可以创建COM...

    Delphi开发B_S数据库应用系统教程_delphi_DelPhi开发B/S_delphiBS_Delphi开发BS

    教程可能涵盖如何使用Delphi构建一个简单的B/S系统,包括用户登录、数据查询、添加编辑删除记录等功能,以及如何处理错误和异常。 通过本教程的学习,开发者将能够掌握利用Delphi开发B/S数据库应用系统的技能,从而...

    DELPHI C/S结构网络在线考试程序.rar

    总结来说,这个DELPHI C/S结构网络在线考试程序是一个很好的学习资源,它涵盖了Delphi编程、网络通信、C/S架构设计等多个方面的知识。通过深入研究和实践,开发者不仅可以掌握Delphi开发技巧,还能提升网络编程和...

    Delphi++【新的Delphi工具来了】

    Delphi++ is a Rapid Application Development tool and currently the only development environment that includes a foundation library to create Live Applications that can be distributed and executed on ...

    DELPHI 7 调用 JAVA 接口

    5. **编写Delphi代码**:在Delphi 7中创建一个新的单元,导入生成的JNI头文件,并实现调用Java接口的方法。Delphi代码会包含JNI函数调用,如`FindClass`, `GetMethodID`, `NewGlobalRef`, `CallStaticObjectMethod`...

    delphi + sql c\s结构的航空购票系统

    在本案例中,我们讨论的是一个使用Delphi编程语言和SQL数据库构建的C/S结构航空购票系统。Delphi是Embarcadero Technologies开发的一种集成开发环境(IDE),它以其高效的编译器和面向对象的Pascal语法闻名,广泛...

    delphi c/s考勤系统

    Delphi C/S考勤系统是一种基于客户机/服务器(Client/Server,C/S)架构的管理软件,它利用Delphi编程环境进行开发,专用于实现企业的考勤管理功能。Delphi以其高效、便捷的开发效率和丰富的组件库,在软件开发领域...

    delphi+java

    标题 "Delphi + Java" 暗示了我们讨论的主题是关于两个编程语言——Delphi和Java的集成与互操作性。Delphi是一种基于Object Pascal的高效开发工具,主要用于Windows平台,而Java则是一种跨平台的编程语言。两者结合...

    Delphi大型C/S模式開發

    文件"DelphiBigCS.doc"可能包含了关于以上内容的详细指南,包括具体步骤、最佳实践和示例代码,对于深入理解Delphi在大型C/S模式开发中的应用非常有价值。通过学习和实践,开发者可以掌握如何利用Delphi有效地构建...

    Delphi调用Java类(支持Java 6)完整源代码,可直接调试运行

    这两天正在做一个项目,需要使用Delphi与互联网社区网站进行对接,协议中使用了RSA加密;通过测试,Delphi的RSA算法无法与Java的RSA算法兼容,经过各种周折最终尝试了Delphi调用Java的类的方法进行RSA加密解密;这是...

    Delphi调用Java类和包源代码

    为了在Delphi中调用Java,我们需要一个中间桥梁,这就是JNI(Java Native Interface)。JNI允许Java代码调用本地(如C/C++或Delphi)代码,反之亦然。 1. **安装Java JDK**:首先,确保你已经在你的系统上安装了...

    delphi c/s 资料

    Delphi是一种强大的面向对象的 Pascal 编程语言,特别适合于开发C/S(客户机/服务器)架构的应用程序。在C/S模式下,客户端应用程序负责用户界面和与远程数据库服务器的交互,而服务器则集中处理数据库操作。在本文...

    DELPHI 11调用JAVA 接口

    本篇将详细介绍如何在Delphi 11中调用Java接口,并传递参数及接收返回结果。 1. **JNI(Java Native Interface)基础** JNI是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。在Delphi中调用...

    FLEX+Delphi+Java+C#联合打造聊天室

    FLEX+Delphi+Java+C#联合打造聊天室14220982这是一个综合实战的例子,它是用FLEX+Delphi、FLEX+Java、 FLEX+C#多种语言巧妙组合而打造的超强功能的聊天室。服务端代码基于JAVA技术。彻底解决了以往版本中的沙箱问题...

    C# QQ源码 C/S结构

    1、C/S结构,全C#版,即服务器、客户端全VS2010的C#编写; 相关办公系统(部署说明+qqimdb),另送qqsrc. 本用于政务网的即时通信的政务交流工具,界面上高仿QQ,包含完整客户端、服务器端、数据库源文件,全部C#编写...

    b/s打印activex (delphi+fasterReport)

    通过这样的方式,开发者可以利用Delphi和FasterReport的强大力量,在B/S架构下提供高效、灵活的打印解决方案。尽管这种方式有一定的局限性,如依赖于特定的浏览器和安全设置,但在特定的项目需求下,它仍然是一种...

    delphi调用Java函数

    1. **创建Java库**:在Java端,你需要编写一个包含你要被调用函数的Java类,并编译成一个`.class`文件,然后通过Java的`javah`工具生成C/C++的头文件,这个头文件描述了Java函数的C语言接口。 2. **JNI接口**:在...

Global site tag (gtag.js) - Google Analytics