Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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
使用delphi的一个软件通过多个用户发送数据_Delphi_Sockets_Networking_Network Programming_Delphi Xe2 - Fatal编程技术网

使用delphi的一个软件通过多个用户发送数据

使用delphi的一个软件通过多个用户发送数据,delphi,sockets,networking,network-programming,delphi-xe2,Delphi,Sockets,Networking,Network Programming,Delphi Xe2,我希望有人能帮助我。 我正在编写一个软件,用户可以将信息填入数据库,但我想安装我在多台计算机上创建的相同软件。当其他用户将新信息插入软件并单击“保存”时,该信息必须显示在他/她的计算机上,同时显示在网络中的其他PC上 我认为这是一个很难破解的问题,但我希望有人能帮助我 问候语有很多方法可以解决这个问题。我建议使用服务器端应用程序(例如安装在数据库服务器系统上),该应用程序接收来自插入应用程序的通知。然后,服务器端应用程序将向客户端发送UDP广播或使用TCP连接来通知它们 然后,客户端只需要在后台

我希望有人能帮助我。 我正在编写一个软件,用户可以将信息填入数据库,但我想安装我在多台计算机上创建的相同软件。当其他用户将新信息插入软件并单击“保存”时,该信息必须显示在他/她的计算机上,同时显示在网络中的其他PC上

我认为这是一个很难破解的问题,但我希望有人能帮助我


问候语

有很多方法可以解决这个问题。我建议使用服务器端应用程序(例如安装在数据库服务器系统上),该应用程序接收来自插入应用程序的通知。然后,服务器端应用程序将向客户端发送UDP广播或使用TCP连接来通知它们

然后,客户端只需要在后台线程中侦听服务器消息。消息将从服务器“推送”到客户端

可以用作起点的一个示例是Indy Telnet客户端组件,该组件具有服务器消息的侦听器线程。您不必为传入连接打开客户端防火墙即可以这种方式工作

也有完整的消息传递解决方案可供选择,但它们可能会成为满足您需求的重量级解决方案。如果你喜欢,我可以提供一些链接

我不推荐

  • 数据库轮询(过于昂贵且不灵活)
  • 数据库事件(在服务器进程中运行,可能会阻止操作或崩溃)


可用于此消息传递系统的标准是WebSocket。客户端和服务器端都有商业和开源的Delphi实现。

您需要使用Delphi吗?Firebird SQL server支持事件,因此如果您让所有应用程序都使用单个DB服务器,然后,他们可以接收这些事件并轮询更改。@Arioch“使用DB事件将导致数据库中的业务逻辑(存储过程、触发器需要发布事件),对于脱机但需要通知的客户端,仍然需要轮询。我建议使用数据库存储数据,并在适当的位置执行所有其他操作。@mjn好的,在FB2中,您可以使用
EXECUTE语句
DML SQL
发布事件。但是是的,这些活动是有限的。但是,用于解决问题而不引入新实体和故障点的基本用途。我们可以为在线客户端添加类似于XMPP的服务,然后为离线客户端添加类似于NNTP/RSS的服务——最终需要安装三台服务器、实现三个协议和关心三个连接。取决于任务的复杂性,这确实是最好的选择。但是“lo-tec”,有点像YAGNI,也需要评估。@mjn谈到“数据库中的业务逻辑”——这是通过三层模型的客户机/服务器的永恒选择。但即使是您的答案似乎也不能说明真正的应用服务器方法。使用不同的服务来存储数据和更新数据会更加脆弱。您是否可以链接您提到的客户端和服务器端的开源delphi实现的更多信息?这真的很有帮助!