delphi - 在 PC 之间共享 Delphi 中的公共(public)内存区域

标签 delphi shared-memory delphi-2006 mailslot

我有一个 Delphi 2006 应用程序,它收集数据并将其显示为许多 channel 的摘要,TDrawGrid 上每行一个 channel 。我在网络上的其他多台 PC 上运行相同的应用程序,但这些其他 PC 是从属设备 - 它们不收集数据,而只是提供摘要的远程显示。

目前,slaves只是模仿master上的摘要显示屏幕,这是通过master的mailslots广播实现的。

我想以不同的方式实现它,以减少主服务器的负载,并为从服务器提供更多的灵 active 和独立性来解释数据。此外,我在跨子网的数据邮槽广播方面遇到问题。

我可以使用一些共享内存方案将数据放置到一个内存映射文件中,从属设备可以从任何地方(甚至通过网络)访问该文件吗?我们正在谈论最大 100k 字节的内存大小,比如说,由主服务器大约每秒更新一次,可能在一个线程中,以保持主服务器前台任务的响应。

最佳答案

共享内存不能在网络上运行(除非你运行 VPN),而且它在网络上通常不能很好地运行( View 可以不同步,你不能通过网络同步它们)。

我可以看到您的任务的几种解决方案:

选项 1。使用面向消息的中间件 (MOM),例如 MSMQ、kbmMW、我们的 MsgConnect 来广播仅包含数据更改的通知。这样客户端就不需要额外轮询服务器以获取数据快照。所有 MOM 解决方案都使用 TCP 连接进行操作,这比邮槽更可靠。

选项 2。使用一些客户端-服务器 DBMS,可能是支持向客户端发送通知的数据库管理系统(我不是 DMBS 方面的专家,所以我不能告诉你名称)。

关于delphi - 在 PC 之间共享 Delphi 中的公共(public)内存区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3840227/

相关文章:

delphi - 在Delphi移动开发中,如何在备忘录中编辑选定的文本字体

c++ - 对高度依赖数学的用户编码的脚本或插件语言的建议?

delphi - 强制 TMonthCalendar 显示用户定义的日期格式

c++读取时同步共享内存

Delphi - 查找正在从我的程序访问文件的进程

delphi - 我什么时候应该在 Delphi 中使用增强的记录类型而不是类?

delphi - 如何使用 Borland 数据库引擎和 Delphi 应用程序解决 "Cannot perform this operation on a closed dataset"问题?

java - 多线程循环的效率

c# - C 到 C# (Mono) 内存映射文件/linux 中的共享内存

delphi - 使用 XML 数据绑定(bind)时生成复杂类型的问题