如何在这个系统内进行通信?

2024-03-10

我们打算设计一个具有三个“层”的系统。

  1. 总部,只有一台服务器
  2. 区域上有很多“节点”
  3. 使用 iPad 的用户。

HQ 与节点进行 2 路通信,节点与用户进行 2 路通信。用户从不与总部沟通,反之亦然。

权力机构规定总部的 Windows 应用程序(使用 Delphi)和用户 iPad 的本机桌面应用程序。他们对节点没有意见。

如果有令人信服的技术论点,我也许能够击败他们,从“法令”转向“更喜欢”Windows 程序(例如,使其基于浏览器)。节点没有 GUI,它们只是坐在那里扮演中间人。

这些东西通信的最佳方式是什么(SOAP/HTTP/AJAX/jQuery/home-brewed-protocol-on-top-of-TCP/其他东西?)最好端到端使用相同的协议,还是hqnode 和 nodeiPad 有不同的协议吗?

这两个接口的两端可能都希望启动一个事务(如果我推出自己的协议,我可以轻松地做到这一点),那么我应该使用推/拉/长轮询还是什么?

我希望这个描述是有意义的。如果没有,请提问。谢谢。


Update:
文件大小通常低于 1MB,不可能超过 10MB 甚至 5MB。在第一个文件被确认之前,不会发送第二个文件。

文件从总部“下坡”流向节点,再到 iPad。文件永远不会“上坡”流动,但会有一些小数据包(除了 ack 之外),这些数据包是由 iPad 上的用户操作发起的。这些将发送到本地节点,然后发送到总部。我们讨论的可能是

我想各个方向也会有低速率的一般控制和维护流量。


对于推/拉(发布/订阅或点对点通信),可以使用跨平台消息代理。我不确定是否有适用于 Microsoft Message Queue (MSMQ) 的 (iOS) 客户端库,但我也会评估开源解决方案,例如HornetQ http://www.hornetq.org/, Apache ActiveMQ http://activemq.apache.org/, Apollo http://activemq.apache.org/apollo/, OpenMQ http://mq.java.net/、阿帕奇QPid http://qpid.apache.org/ or RabbitMQ http://rabbitmq.com/.

所有这些解决方案都为分布式消息传递提供了可靠的基础,例如故障转移、集群、持久性、高性能和附加的许多客户端。在此基础设施上,可以交换任何内容类型(JSON、二进制、纯文本)的消息,并且顶部消息可以包含路由和优先级信息。它们还支持事务消息传递。

有Delphi和Free Pascal可用的客户端库 http://www.habarisoft.com/适用于许多企业优质开源消息传递产品。 (我是其中一些的作者,支持ActiveMQ、Apollo、HornetQ、OpenMQ和RabbitMQ)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在这个系统内进行通信? 的相关文章

  • 如何将FireMonkey表单无缝嵌入VCL表单中?

    我使用了中描述的技巧这个问题 https stackoverflow com questions 7315050 delphi xe2 possible to instantiate a firemonkey form in vcl app
  • 我应该害怕使用 UDP 进行客户端/服务器广播通话吗?

    我在过去的两天里阅读了每一篇StackOverflow问题和答案 以及googling当然 关于印地TCP and UDP协议 以便决定在我的用户应用程序和 Windows 服务之间的通信方法中应该使用哪一种 从我目前所看到的来看 UDP是
  • OpenSSL:无需 SSL_read() / SSL_write() 即可执行加密/解密

    我已经用 C 语言编写了一个基于事件的网络库 现在我想通过 OpenSSL 添加 SSL TLS 支持 而不是使用SSL read and SSL write 我宁愿让 OpenSSL 只执行传出 传入数据的加密 解密 让我自己传输 接收数
  • 如何将 JSON 字符串转换为图像?

    我有一个将图像转换为 JSON 数组的应用程序 并将其保存到 blob 字段中 function getImage String var memorystream TMemoryStream jsonArray TJSONArray beg
  • 使用 Java 的 OpenId 提供者/服务器

    我正在尝试使用 OpenId 服务增强现有的 Java Web 应用程序 以便登录用户可以使用我的 Web 应用程序作为 OpenId 提供程序登录另一个启用 OpenId 的应用程序 My first attempt was to use
  • 如何通过代理将套接字连接到http服务器?

    最近 我使用 C 语言编写了一个程序 用于连接到本地运行的 HTTP 服务器 从而向该服务器发出请求 这对我来说效果很好 之后 我尝试使用相同的代码连接到网络上的另一台服务器 例如 www google com 但我无法连接并从网络中的代理
  • 我需要避免尝试更新连接到 TSQLQuery 的 Delphi TClientDataset 中的非物理字段

    概要 我的代码正在尝试更新 Delphi XE 中的非物理字段TClientDataset 连接到TSQLQuery以其SQL属性集 作为运行时的结果创建Open命令 我有一个TClientDataset连接到一个TDatasetProvi
  • 使用 TStringList 的分隔符解析字符串,似乎也解析空格(Delphi)

    我有一个简单的字符串 由某个字符分隔 比如说逗号 我应该能够创建一个 TStringList 并将其分隔符设置为逗号 然后将 DelimitedText 设置为我想要解析的文本 并且应该自动解析它 问题是 当我查看输出时 它还包含空格作为分
  • 如何在 tomcat 上部署 Java Web 应用程序 (.war)?

    我有一个 warJava Web 应用程序的文件 现在我想将它上传到我的 ftp 服务器 以便我可以执行它 我应该执行哪些步骤来运行它 webapp的上下文路径是 mywebapp Edit 实际上 我的 ftp 服务器名称是ftp bil
  • IMAP 转发器

    我想知道从 IMAP 帐户转发邮件的最快 最可靠的方法是什么 我的大学不允许我们的学生邮箱转发到私人电子邮件帐户 这里每个人都使用 Gmail 或 Hotmail 这是一个政治问题 而不是技术问题 我们确实可以通过 IMAP 访问邮箱 我想
  • Delphi 5 的哈希表实现 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 您知道 Delphi 5 的良好且免费的哈希表实现吗 我需要在哈希表中组织大量数据 并且我有点担心在网
  • 在Delphi 7中,为什么我可以给const赋值?

    我将一些 Delphi 代码从一个项目复制到另一个项目 发现它在新项目中无法编译 但在旧项目中可以编译 代码看起来像这样 procedure TForm1 CalculateGP const Price money 0 begin Pric
  • 使用项目中的波形文件

    我目前只能通过将波形文件放在已编译的 exe 旁边来播放背景声音 但我实际上想要一个包含波形文件的静态可执行文件 这在Delphi XE2中可能吗 这是我的代码 SndPlaySound Raw wav SND ASYNC or SND L
  • 奇怪的行为与缓存。清单/离线使用网络应用程序保存到ipad ios6的主屏幕

    我刚刚在装有新 iOS 6 的 iPad 上发现了一些奇怪的行为 我正在测试一个用于离线使用的网络应用程序 Web 应用程序只不过是一个带有缓存清单的静态网站 因此没有使用像 sencha touch 这样的特殊框架或像 phnoegap
  • Delphi:写入后代类中私有祖先的字段

    我需要修复第三方组件 该组件的类具有私有变量 该变量由其后代主动使用 TThirdPartyComponentBase class private FSomeVar Integer public end TThirdPartyCompone
  • 如何释放 TInterfacedObject 中的 TObject 成员

    我知道接口对象是引用计数的 因此不需要手动释放它 但如果它有一个 TObject 继承成员 我是否应该在析构函数中手动释放该成员 考虑以下代码 program Project2 APPTYPE CONSOLE R res uses Syst
  • 防止多个实例 - 但还要处理命令行参数?

    我正在从我的应用程序处理与 Windows 相关的扩展文件 因此 当您在 Windows 中双击文件时 它将执行我的程序 然后我从那里处理该文件 如下所示 procedure TMainForm FormCreate Sender TObj
  • 在 Delphi 或 C++ Builder 中使用 Chromium Edge WebView2 [重复]

    这个问题在这里已经有答案了 既然 Microsoft Chromium Edge 已经最终确定 是否可以在 Delphi 或 C Builder 中使用它 据我了解 它是基于WebView2成分 是否有一个组件 例如TWebView2或者E
  • CharInSet 不适用于非英文字母?

    我已经将应用程序从 Delphi 2007 更新到 Delphi 2010 一切都很顺利 除了一条编译正常但不起作用的语句 If Edit1 Text 1 in S then ShowMessage Found else ShowMessa
  • 什么是 SO_SNDBUF 和 SO_RCVBUF

    你能解释一下到底是什么吗SO SNDBUF and SO RCVBUF选项 好的 出于某种原因 操作系统缓冲传出 传入数据 但我想澄清这个主题 他们的角色 通 常 是什么 它们是每个套接字的缓冲区吗 传输层的缓冲区 例如 TCP 缓冲区 和

随机推荐

  • Oh-my-posh 主题无法与 Powerline 字体和 ConEmu 一起正常工作

    I use PowerShell as my shell on Windows 7 I find that ConEmu is a really good terminal Since I am not on Windows 10 I ca
  • 如何使用 IntelliJ 设置 libgdx?

    我跟着this https github com libgdx libgdx wiki Gradle and Intellij IDEA教程 但似乎有点过时了 我不知道 不幸的是 我对 Java 的经验不是很丰富 但对 C Python 所
  • Javascript:如何检查 URL 是否包含单词

    我想检查浏览器中的 URL 是否包含单词 桌面 我从桌面启动 html 文件 它的网址是 file C Users Joe Desktop TestAlert html 但应该会出现一个警报 但这不起作用 这是我的代码 h1 Test001
  • 动态设置用户任务受让人

    我必须在 activiti 中创建需要以下用例的流程 1 表单有一个人员搜索字段 2 当有人填写表单并使用填充姓名的人员搜索字段完成任务时 我需要将分配的下一个任务的名称设置为可以对下一个任务执行操作的用户 如何使用 activiti 引擎
  • android中什么时候绘制视图?

    我想获取活动中视图的大小 但无法在任何活动生命周期回调 onCreate onStart onResume 中获取该信息 我假设这是因为视图尚未绘制 在什么时候绘制视图 是否有回调我可以放置我的代码以便获得视图的大小 findViewByI
  • Quarkus 替代 spring-data-jdbc

    默认DAO层 ORM框架中Quarkus is Panache 在 Hibernate 之上 这很奇怪 因为我没有找到任何可插入外部 L2 缓存实现 如 Redis 的内置集成 夸库斯被称为cloud native但在实际系统中 使用默认的
  • 如何使用 cURL 在 php 中发布表单数据?

    我有以下命令 它使用 form F 选项 我知道它正在工作 curl form file home USERNAME import csv https apiprovider com api v0 imports token KEY 我需要
  • mongodb聚合获取数组中负序的最大数量

    我需要通过聚合从数组中获取负序列的最大计数 示例文档 id 1 x 1 1 1 1 1 1 1 1 1 1 1 id 2 x 1 1 1 1 1 1 1 预期结果 id 1 x 4 id 2 x 2 请指教 您可以使用 reduce htt
  • 如何为 Cloudfront 上的静态托管网站的子目录设置默认根对象?

    如何为 Cloudfront 上静态托管网站上的子目录设置默认根对象 具体来说 我想www example com subdir index html每当用户请求时提供服务www example com subdir 请注意 这是为了交付保
  • quartz:xml 文件的文档?

    quartz xml 文件 特别是 jobs xml 的文档在哪里 我找到了javadoc http www quartz scheduler org docs api index html在线 但我似乎找不到如何编写 xml 文件的文档
  • 如何在 sed 中转义斜杠、双引号和单引号?

    据我所知 当您使用单引号时 里面的所有内容都被视为文字 我想要那个来代替我 但我也想找到一个带有单引号或双引号的字符串 例如 sed i s http www fubar com URL FUBAR g 我想用 URL FUBAR 替换 h
  • Oracle 查询 - 仅获取选择字段中的字符串

    也许这听起来有点疯狂 但我需要提出一个查询来仅检索字母数字字段中的字母 例如 TABLE 1234ADD 3901AC 1812OPA82711AUU 预期结果 ADD AC OPA AUU 谢谢你 看起来您只想删除数字 您可以使用REGE
  • 无法在 Android 上使用 AlarmManager 安排通知(使用 Qt)

    我正在 qt 5 5 中执行以下操作 项目 我正在尝试使用 android 中的警报管理器安排本地通知 这是安排通知的代码 class ScheduledNotifications static public int notificatio
  • 是否可以让 Visual Studio 或 Resharper 用不同的颜色突出显示枚举?

    我认为如果用与类属性不同的颜色突出显示枚举属性 代码会更具可读性 对于 VS2010 VS2013 VS2015 VS2017 VS2019 工具 gt 选项 gt 环境 gt 字体和颜色 显示文本编辑器的设置 显示项目 用户类型 枚举 更
  • 如何提取 Tidymodels 生成的 GLMNET 系数

    我估计了一个glmnet逻辑回归使用整洁的模型 但我无法弄清楚有两件事是密切相关的 整洁的模型 a 如何提取估计系数 b 保存估计模型以供将来生产使用 以下是伪模型的代码 我试过tidy coef and predict 但他们都失败了 任
  • javamail还提取封装消息的附件内容类型:message/rfc822

    我想提取封装在消息 InputStream 中的 eml 消息的所有附件 内容类型 message rfc822 InputStream is new FileInputStream Path MimeMessage mime new Mi
  • 双重修改后如何继续合并?

    我在用着git rebase i重写历史记录 在这种情况下 对早期提交的更改集进行小的更改 换句话说 A B C master gt A B C master I know C也在隐含地改变 但你明白了 这是我迄今为止的进展 git reb
  • Eclipse Neon.1 泛型编译错误:无法推断类型参数

    MWE https www wikiwand com en Minimal Working Example import java util Comparator import java util TreeMap import static
  • Ruby 的 watchr 在 Python 中相当于什么?

    我喜欢这个概念watchr https github com mynyml watchr 它监视文件系统并在发生变化时运行回调 有纯Python 的等价物吗 最好可以 pip 安装 你可能应该看看看门狗 http packages pyth
  • 如何在这个系统内进行通信?

    我们打算设计一个具有三个 层 的系统 总部 只有一台服务器 区域上有很多 节点 使用 iPad 的用户 HQ 与节点进行 2 路通信 节点与用户进行 2 路通信 用户从不与总部沟通 反之亦然 权力机构规定总部的 Windows 应用程序 使