delphi 应用程序的基于 Web 的实时客户端。如何?

Posted

技术标签:

【中文标题】delphi 应用程序的基于 Web 的实时客户端。如何?【英文标题】:Real time web based client for delphi app. HOWTO? 【发布时间】:2011-08-25 15:24:24 【问题描述】:

首先,我想要的是相当复杂的,至少对我来说是这样,但另一方面,这听起来很令人兴奋。

我有一个用 delphi 编写的软件,我想要一个基于 Web 的实时客户端。

要求:

在客户端纯javascript 闪亮的界面(GWT、SmartGWT) 服务器和客户端之间的异步连接。 Ajax 推送、长轮询、Comet、WebSocket?

在服务器端

可扩展性

在 delphi 方面,我认为我可以使用 Overbyte 的 ICS 来处理请求。我知道 ICS 包中的 THttpAppSrv 可以轻松提供简单的内容,但是 Websocket 呢,或者我如何使用它进行长轮询?

您认为这是一个很好的组合(GWT、SmartGWT 在客户端,而 ICS 在 delphi 端),是否有任何示例项目,或者是否有任何其他解决方案?

更新 感谢有用的 cmets,我想我更接近解决方案。很高兴知道 GWT 可以使用自定义服务器,但是我认为 Arnaud 是对的,带有自己的 Jetty 服务器的 GWT 是一个完整的解决方案,但不幸的是不适合我。 :) 我想我需要一个用 delphi 编写的服务器,它可以与 GWT RPC 通信。

更新 2 我接受了 Arnaud Bouchez 的回答,这看起来我最适合原始问题,但是我认为有一个更好的解决方案(如果你稍微改变一下要求)来创建一个在浏览器中运行的 delphi 应用程序的客户端。我只是在这里做一点评论,分享这个想法。最后我使用了node.js 服务器,并在ZMQ 的帮助下将它连接到我的delphi 应用程序。

【问题讨论】:

GWT + GWT+RPC + Jetty(或 Tomcat、JBoss、GlassFish、WebSphere...)可以很容易地与 Delphi 集成。如果您身边有 Java 开发人员,他们可以使用这些工具创建应用程序的 Web 层,然后通过同步或异步接口集成 Delphi 业务层,则可以将两者的优点结合起来。要获得巨大的额外性能提升,请考虑使用 memcached 之类的缓存解决方案,它具有 Delphi 和可用的 Java 客户端。 更新:如果您有兴趣,我可以构建一个完整的 GWT / Delphi 集成示例,作为我为我的 Delphi/Java 通信库编写的文档的一部分,并与完整的 Java 源代码一起发布。 @mjn 谢谢。是的,我很感兴趣。一个在客户端带有 SmartGWT 小部件的简单示例,在 delphi 端也是如此,连接异步将不胜感激。 该示例正在进行中,此处提供了一个 wiki 页面:Delphi and Google Web Toolkit (GWT) Integration。该示例只需要 Java 和 Maven 即可构建整个项目。 @mjn 感谢您的示例,它有效,我想我可以使用它来满足我的需求。看起来很有希望,然而,当我意识到这对我来说还有很长的路要走时,这些技术对我来说是新的,我必须学习很多。再次感谢您。 【参考方案1】:

关于Delphi端的HTTP服务器,可以考虑使用微软自XP以来提供的kernel mode http.sys server。应该比 ICS 更快。

对于 AJAX 部分,请查看 Op4JS 或后续 ElevateDBBuilder。

这些解决方案的优点在于您可以编写对象 pascal 代码,并且该代码将被翻译成 JavaScript。尚未完成,但值得等待他们的发布时间。

当然,确实存在更经典的 AJAX 解决方案,例如 IntraWeb 或 ExtPascal。两者都实现了自己的 Web 服务器。

关于 GWT,AFAIK 它们是 Java 库,与 Java 世界紧密相连。您将无法使其与 Delphi 一起使用。

关于 GWT 的编辑:

GWT 是一个完整的客户端-服务器框架。

如果您使用 GWT,我怀疑您最终会在某个时候对应用程序进行完全的 Java 重写。否则您将错过 GWT 作为框架的最大兴趣。这是你的选择。

我宁愿依赖一些更标准的方法,例如使用 JSON 进行通信,就像我们使用我们的框架一样。

【讨论】:

感谢您的链接,这些都是很棒的工具,但我不需要编写对象 Pascal 代码,而是以某种方式将其转换为 javascript,而是通过 websocket 进行通信,或者在客户端和服务器端之间进行长轮询.实际上 GWT 会将 java 代码转换为 javascript。 @balazs 那么你想用整个 Java 编写客户端部分吗?但是 GWT 使用基于 Java Servlet 的 RPC 机制来提供对服务器端资源的访问。因此,您还必须用 Java 编写服务器部分(或用 Delphi 模拟它——但听起来很难)。我编辑了我的答案,以便对 GWT 进行更深入的评论。 关于GWT的一些说明: * GWT不提供“自己的HTTP服务器”,或者要求HTTP服务器是基于Java的 * GWT可以使用JSON作为它的协议,所以它不依赖于服务器端的 Java Servlet @mjn 我引用了 GWT 文档 - 但我应该进一步阅读它。如果您使用 JSON,您可能会对我们的 ORM 感兴趣,它实现了基于客户端-服务器 JSON 的架构。您可以将它与 GWT 一起使用。但是 JSON 布局并不相同(例如,我们使用双精度的 JSON 数组作为 array of double 属性,而 GWT 听起来像是期望包含双精度属性的 JSON 对象数组)。 @mjn 感谢您明确这一点,我更新了问题,因为我发现了一些东西。【参考方案2】:

Delphi,客户端的纯 javascript 和闪亮的界面?你说的是Unigui!

【讨论】:

不是真的,我不想重写整个应用程序,超过 50 万行。我只想添加一个客户端。不过你说得对,Unigui 很有前途,也许我会在另一个项目中使用它。【参考方案3】:

我之前从事过 php、ASP 和 Cold Fusion,并且想(几乎)对 Delphi 做同样的事情。我开始xxm。它在同一个文件中包含 Delphi 和 html 代码,并且当您在浏览器中点击刷新时(重新)编译一个库。我已经为这些库制作了处理程序,因此您可以在 IIS、Apache、InternetExplorer、Firefox 中运行它们,或者直接从基于 Delphi 的 HTTP 实现中运行它们。 (我也开始研究 http.sys 处理程序,但这需要更多的工作。)

另外,关于您的问题,我想要流式传输,我希望我的输出能够尽快传输到监听客户端,这样您就可以进行长时间运行的页面、长时间轮询和像。至于GWT等客户端脚本,我已经成功使用prototype和jquery了。

【讨论】:

【参考方案4】:

您查看Intraweb 了吗?我自己并没有广泛使用它 - 但它似乎在 Delphi 网络应用程序中很受欢迎。

我已经使用带有 IIS 或 Apache 的 TWebBroker 制作了几个 Web 应用程序。它是异步的,允许您轻松地与其他应用程序移植/共享 Delphi 代码。并且它将支持 Ajax 调用。

【讨论】:

以上是关于delphi 应用程序的基于 Web 的实时客户端。如何?的主要内容,如果未能解决你的问题,请参考以下文章

在基于 Java 的 Web 应用程序中从数据库到前端的实时数据复制

delphi怎样发布基于Microsoft SQL Server的程序

Delphi 7 中使用 Paradox 实时 BMP 到 JPG 转换

基于java的一款实时聊天系统,包含服务端 + 客户端 + web端

Delphi 和 Web 应用程序之间的行尾问题

为 HTML5 Django Web 应用程序实现实时通知系统