我有一个用 Delphi 2006 编写的经典客户端/服务器(胖客户端和数据库)程序。当客户端满足某些条件时,我需要非常快速地通知所有其他客户端。到目前为止,这是使用 UDP 广播完成的,但这不再可行,因为客户端现在从 LAN 外部连接,并且 UDP 广播仅限于本地网络。
我知道 Indy 库,但不确定要使用哪些组件以及如何构建它。我猜我需要有一个客户端连接到的服务器来接收和分发消息......?有什么样品可以让我开始吗?
是否还有其他我应该考虑的组件集或技术?
我有一个用 Delphi 2006 编写的经典客户端/服务器(胖客户端和数据库)程序。当客户端满足某些条件时,我需要非常快速地通知所有其他客户端。到目前为止,这是使用 UDP 广播完成的,但这不再可行,因为客户端现在从 LAN 外部连接,并且 UDP 广播仅限于本地网络。
我知道 Indy 库,但不确定要使用哪些组件以及如何构建它。我猜我需要有一个客户端连接到的服务器来接收和分发消息......?有什么样品可以让我开始吗?
是否还有其他我应该考虑的组件集或技术?
简单的答案是 Delphi(和其他工具)中可用的标准协议不允许反向通知。我研究了一个我想使用 SOAP 的项目。他们都假设客户端询问服务器,服务器响应,仅此而已。
对我来说,解决方案是 RemObjects SDK。这允许您向客户端发送通知,并且通知可以包含您喜欢的任何数据(就像客户端到服务器一样)。我自己使用 SuperTCP 连接,但它也适用于其他人。它仍然可以为必须使用它的客户端提供 SOAP 接口,但是对于您可以同时控制客户端和服务器的地方,它工作得非常好。
使用 Delphi 有一些非常简单的方法可以做到这一点,尽管我确信 RemObjects SDK 也能很好地工作。
显然,实施的选择将取决于您的设置和需求。调整将是必要的,以获得最佳结果。
为此,您需要的组件是TIdTCPServer(侦听器)和TIdTCPClient(发送器)。两者都在 Delphi 的 Indy 库中。
http://www.overbyte.be的ICS 组件很棒。a.) 比 Indy 更好的兼容性 b.) PostCard ware 很好的例子和支持。使用 TClientSocket 和 TServerSocket
FirebirdSQL 项目使用通知的概念作为向客户端发送字符串的服务器-客户端连接。为此,数据库服务器使用另一个端口。并要求客户端注册通过 API 调用接收某种类型的通知是很有趣的。
您可以使用相同的想法。
RabbitMQ 应该符合您的要求。服务器是免费的,可以使用。您只需要一个客户端来连接、推送/发送消息和获取/拉取通知消息
服务器:http ://www.rabbitmq.com/download.html 做一个google客户端或者自己实现
干杯
您应该能够将多播 UDP 用于相同目的。唯一的区别是从每个客户端加入多播组。
http://en.wikipedia.org/wiki/IP_Multicast
http://en.wikipedia.org/wiki/Internet_Group_Management_Protocol
编辑:澄清一下,多播让您加入与多播 IP 地址关联的给定“组”。发送到该地址的任何数据包都将到达已加入该组的每个客户端
您可以观看 weonlydo wodVPN 组件,该组件允许您创建强大的 UDP 打孔并获得端口转发或普通 VPN(带有完善的网络适配器),因此您可以在 NAT 后面连接两台 PC。
我将这个控件用于我们的通信程序并且工作得很好。