`
erikchang
  • 浏览: 50666 次
  • 性别: 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客户端的图文混编编辑器如何实现?

分享到:
评论
22 楼 erikchang 2011-02-09  
<p>综合上面各位的讨论,总结一下初步方案,是否可行需要进行实践论证:<br>1、客户端使用Delphi组件IdHttp进行数据交互,重新包装自己的协议,是的数据量最小化,去掉http一些头定义信息;</p>
<p>2、客户端和服务器端采用JSON数据格式进行数据交互,客户端将信息封装成JSON格式,服务器端解析该数据,同事,客户端的请求服务器也给予JSON数据返回,返回数据后,客户端自己解析JSON数据并生成相关的数据信息;</p>
<p> </p>
21 楼 erikchang 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!
20 楼 tiny_bird 2011-02-09  
     由于是第一次采用这种开发方式,很多初级问题都需要解决,初步提出以下需要解决的问题:

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

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

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

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

不建议图文混排,最好分开编辑保存
如果使用tomcat 做 server 中文url 和字段需要处理,我们一般用base64编码与解码中文
用xml or json 都应该没问题
19 楼 632244434 2011-02-09  
个人也觉得嵌入office不如嵌入webbrower。

一般来说.net c++很多流程,图文混排,都是这个思路。
18 楼 huangyuanmu 2011-02-09  
我们公司的产品曾经采用的架构和楼主描述的差不多,只不过前端应用没有那么复杂而已。

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

后端采用spring为核心的java技术实现。
17 楼 hszdz 2011-02-08  
试试phprpc
16 楼 duronshi 2011-02-08  
1、Delphi如何像服务器端发送并读取数据;
服务器端是java,通过xmlrpc来实现,客户端将生成的sql语句发送到服务器端,服务器端执行sql,结构通过xmlrpc返回,这是早期,现在可以采用json来实现

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

3、delphi客户端的图文混编编辑器如何实现?
delphi客户端可以将文件保存成xml结构文件的形式(具体数据生成压缩包),将文件上传,服务器端接受到此种文件按规则进行解析处理。
15 楼 lovit 2011-02-08  
现在公司就在用,很稳定,支持客户端也比以前midas的多。。而且可以和TClientDataSet完美结合。
14 楼 erikchang 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支持,不是好的解决方案,不知道有没有其他好的解决办法!


============================
同时希望投了隐藏贴的朋友给我指导,这样的技术方案应该是很成熟的,但网络上没有很好的解决方案,不知道这位朋友为什么投了隐藏贴,可能是很高很高的人,不过更大的是一个垃圾人,呵呵,除非他给大家一个很完美的解决方案和代码实践,否则大家一起鄙视他这个垃圾人!
13 楼 erikchang 2011-02-08  
首先感谢楼上各位朋友的回复,我首先肯定了我的开发结构是很可可取的!我开始怀疑是不是使用一个IdHttp组件就可以完成Get/Post,客户端和服务器端使用JSON数据进行交互,这样就保证数据量最小化,同时也能缓解网络流量的问题,我不知道这样的思路会有哪些弊端,请各位同仁给予经验上的指导!谢谢
12 楼 vdgame 2011-02-08  
<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>1、可以自己处理,走socket或http协议,Indy或者ICS都可以;也有现成的中间件,比如:remobjects,很强大</p>
<p>2、http协议的安全可以通过对数据加密或走https</p>
<p>3、有些控件可以用</p>
11 楼 tedeyang 2011-02-08  
<div class="quote_title">erikchang 写道</div>
<div class="quote_div">
<div class="quote_title">kimmking 写道</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>
<br>1、建议直接用ws或rest 2、使用ssl或者 ws-security 两方面的安全性,基于用户权限的访问,传输过程的加密 3、嵌入一个webbrower之类的activex <br>
</div>
<p> 1、不看好webservices,太重量级了,很多事情复杂化了,这样不利于软件开发进度控制,rest呢,应该是居于B/S的吧</p>
<p> 2、安全方便考虑采取证书,同时在服务器端采用Spring Security控制权限,应该能够满足要求</p>
<p> 3、拒绝ActiveX</p>
<p> </p>
<p>看了一下Indy组件,同时做了一些小尝试,初步看来,使用IdHttp组件可以完成表单的Post功能,JSON-RPC可以在客户端解析,没有做大量数据的测试,期待有过类似经验者给予指导!</p>
</div>
<p>这个思路可以,有公司的CS产品是这么做的,有7、8年应用历史了。最早服务端还是php,后来开发了java版。</p>
<p>性能和稳定性不错。</p>
<p>自己包装开发一个delphi的http组件,用post与java服务器通信。delphi要注意多线程的处理,服务端用jsp或servlet接收都行,协议简单点,能识别key-value对就基本够用了,复杂点可以带上数据类型,或者用hessian协议,再包装包装用反射实现自动数据拆包解包等等。</p>
<p>至于安全,可以用类似bluefish这样的对称加密算法对二进制流加密,密钥可以是事先分发好的,也可以是通过非对称加密协商确定。</p>
<p> </p>
10 楼 mathgl 2011-02-08  
flashing 写道
json是给浏览器用的,这种情况的异构系统交互,并且你打算将来让浏览器也可以交互,ws才是正道。
当然了,如果不打算兼容浏览器了,各种更高效的通信框架一大把呢,ice或者干脆google protobuf


ICE没有对delphi的直接支持。最近乎的是c++ builder..版本还不能太旧了....
9 楼 tiyi 2011-02-08  
引用
看了一下Indy组件,同时做了一些小尝试,初步看来,使用IdHttp组件可以完成表单的Post功能,JSON-RPC可以在客户端解析,没有做大量数据的测试,期待有过类似经验者给予指导!

没啥问题啊。就是多线程不要共用一个组件。或者把IdHttp包装一下,按线程创建。
session你可以自建表。也可以利用http header 的cookie来维持传统的http session
8 楼 DAOException 2011-02-08  
我觉得如果你做CS的话,没必要用HTTP协议了,可以自己定义一些协议,这样可以做到尽可能的减少协议信息里面的冗余内容,提高效率。
7 楼 flashing 2011-02-08  
json是给浏览器用的,这种情况的异构系统交互,并且你打算将来让浏览器也可以交互,ws才是正道。
当然了,如果不打算兼容浏览器了,各种更高效的通信框架一大把呢,ice或者干脆google protobuf
6 楼 sleeplessljy 2011-02-08  
做过一个项目,是.Net WCF + Delphi COM+, 非常成熟的应用,不过跟楼主的方式相反:.Net做网站的Client端,Delphi做Server端。

不过仍然看好Web Service的应用,毕竟是成熟项目,并没感觉到有多笨重。
5 楼 jjx 2011-02-08  
前年做过一个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,使用了动态编译程序下载的模式,维护不同语言感觉会很累

4 楼 tapestry1122 2011-02-07  
delphi里的图文混排编辑器很多的
可以到这边看看
http://www.2ccc.com/downloads.asp?subcatalogid=209&pageid=1

你说的session问题,建议你继承indy http的组件自己自定义一个,然后在自定义组件里处理这些细节问题。
3 楼 erikchang 2011-02-07  
<div class="quote_title">erikchang 写道</div><div class="quote_div"><div class="quote_title">kimmking 写道</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>
<br>1、建议直接用ws或rest 2、使用ssl或者 ws-security 两方面的安全性,基于用户权限的访问,传输过程的加密 3、嵌入一个webbrower之类的activex <br>
</div>
<p> 1、不看好webservices,太重量级了,很多事情复杂化了,这样不利于软件开发进度控制,rest呢,应该是居于B/S的吧</p>
<p> 2、安全方便考虑采取证书,同时在服务器端采用Spring Security控制权限,应该能够满足要求</p>
<p> 3、拒绝ActiveX</p>
<p> </p>
<p>看了一下Indy组件,同时做了一些小尝试,初步看来,使用IdHttp组件可以完成表单的Post功能,JSON-RPC可以在客户端解析,没有做大量数据的测试,期待有过类似经验者给予指导!</p></div><br/>后台使用ss做权限系统,需要在客户端中保存session,session的保存和传递如何实现最合适又是摆在面前的一个问题!

相关推荐

    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