Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何创建一个通知服务器,在数据库更改时通知Delphi应用程序?_Java_Php_Python_Mysql_Delphi - Fatal编程技术网

Java 如何创建一个通知服务器,在数据库更改时通知Delphi应用程序?

Java 如何创建一个通知服务器,在数据库更改时通知Delphi应用程序?,java,php,python,mysql,delphi,Java,Php,Python,Mysql,Delphi,我们需要能够通知Delphi应用程序,以防MySQL中的某些表发生更改 Delphi客户端位于防火墙后面的Internet中,在连接到我们需要实现的通知服务器之前,必须对它们进行身份验证。服务器可以使用Java、PHP或Python等编程,并且必须支持数千个客户端 通常,数据库中的一个更改只需要通知单个客户机,我认为性能不会成为瓶颈。当影响到特定客户的变更发生时,它必须能够通知数千个客户中的任何一个 我一直在考虑一个解决方案,其中: MySQL触发器将通知通知服务器 Delphi客户端连接到消息

我们需要能够通知Delphi应用程序,以防MySQL中的某些表发生更改

Delphi客户端位于防火墙后面的Internet中,在连接到我们需要实现的通知服务器之前,必须对它们进行身份验证。服务器可以使用Java、PHP或Python等编程,并且必须支持数千个客户端

通常,数据库中的一个更改只需要通知单个客户机,我认为性能不会成为瓶颈。当影响到特定客户的变更发生时,它必须能够通知数千个客户中的任何一个

我一直在考虑一个解决方案,其中:

  • MySQL触发器将通知通知服务器
  • Delphi客户端连接到消息队列并使用它获取通知
  • 我的问题是:

  • 从触发器向外部服务器通知更改的最佳方式是什么
  • 选择哪种消息队列解决方案

  • 为什么不使用XMPP协议(又名Jabber)?

    有ApacheCamel和spring集成,两者都提供了一些跨网络发送消息的方法

    对第一个问题的回答:

    检查有关堆栈溢出的问题和答案:

    理论上,可以使用一个简单的用户定义函数向消息代理/队列触发“行更改”消息。但这涉及到外部系统(至少是一个网络子系统),它们可能会发生故障,并且可能会发生不好的事情

    另一种不需要对数据库系统进行危险修改的解决方案是应用程序的多层设计。然后,承载业务逻辑的服务器应用程序需要生成“数据库内容更改”事件,将它们发布到message broker上的发布和订阅消息通道(也称为“主题”),以便每个客户端都将立即收到此消息的副本,或者如果客户端重新连接(使用“”)


    我在这里写了一篇关于这个话题的相关博客文章:

    第二个问题的答案:

    的创建者评估了几个消息代理并发布了他们的结果-对于某些产品,存在或可以使用标准协议实现Delphi客户端库:

    此后,其他产品已经发布,其中一些产品还可以通过非Java协议与Delphi客户端集成,例如:

    • ,它是Sun GlassFish v3应用程序服务器中的默认提供程序代理
    • 这将是JBossApplicationServer6中的默认JMS提供程序。在相同的服务器硬件和操作系统设置下,Hornetq2.0.GA获得的分数比先前发布的SPECjms2007基准测试结果高出307%
    一个非常流行的开源消息代理可以从Delphi、Java、PHP、C#(和其他)客户端使用

    • -无Bruce Snyder、Dejan Bosanac和Rob Davies的“ActiveMQ正在运行”
    所有代理都是为数千个并发客户端和每秒数万条消息而设计的。它们通常还支持集群和故障切换,尽管这不是JMS规范的一部分


    如果速度不是很重要,但您需要高可用性(即使您的内部系统已关闭),则这是一种基于云的服务,可以使用REST和Soap样式的接口进行访问。

    如果您指定了服务器操作系统,则可以更容易地建议选择何种消息队列解决方案。服务器正在运行Linux,谢谢你指出这一点谢谢,这是非常好的信息!我们可以先试试跺脚。基于JMS的解决方案对于我们的需求来说相当复杂。tx:)Stomp是一个不错的选择,对您的项目来说非常成功!