language-agnostic - 通知非 Web 应用程序有关网页更改的最佳方式是什么?

标签 language-agnostic ipc notifications inter-process-communicat

假设我有两个应用程序必须在一定程度上协同工作。

  • Web 应用程序(PHP、Ruby on Rails...)
  • 桌面应用程序(Java、C++、...)

  • 必须从 Web 应用程序通知桌面应用程序,并且发送和接收通知之间的延迟必须很短。 (< 10 秒)

    有什么可能的方法来做到这一点?我可以考虑以 10 秒的间隔进行轮询,但如果必须通知许多桌面应用程序,那将产生大量流量。在 LAN 上,我会使用 UDP 广播,但不幸的是,这在这里是不可能的......

    我很感激你能给我的任何想法。

    最佳答案

    我认为这里的“最佳实践”将取决于您希望服务的桌面客户端的数量。如果只有一个桌面需要通知,那么轮询可能是一种很好的方法——是的,轮询比基于事件的通知开销更大,但它肯定是最容易实现的解决方案。

    如果轮询的开销确实 Not Acceptable ,那么我看到了两个基本的选择:

  • 保持桌面和网络服务器之间的持久连接打开(可能是“ cometd ”风格的网络请求,或原始套接字连接)
  • 从桌面应用程序中公开服务,并将服务的地址注册到 Web 服务器。这样,网络服务器可以根据需要调用桌面。

  • 不过请注意——这两种选择都充满了陷阱。几个亮点:
  • 保持连接打开可能很棘手,因为您希望您的网络服务器可热插拔
  • 从 Web 服务器调用外部服务(例如,您的桌面)是危险的,因为此请求可能会挂起。您希望将此通知移到单独的线程上,以避免占用网络服务器。

  • 为了减轻一些担忧,您可以通过引入中间通知服务器来将不可靠的桌面与网络服务器分离——网络服务器可以在某处发布更新,桌面可以在那里轮询/连接/注册以得到通知。为了避免在这里重新发明轮子,这可能涉及某种 MessageQueue 系统……这当然增加了需要维护新中介的复杂性。

    同样,所有这些方法可能都相当复杂,所以我想说轮询可能是最好的选择。

    关于language-agnostic - 通知非 Web 应用程序有关网页更改的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/817167/

    相关文章:

    iphone - 在我的应用程序上实现徽章通知

    java - 如果没有显式类型转换,语言可以是 "complete"吗?

    assembly - 如何将两个打包的 64 位四字加载到 128 位 xmm 寄存器中

    algorithm - 动态规划 : Maximizing

    python - Heroku 上的进程间通信

    在同一进程中和两个进程之间将字符串从一个指针复制到另一个指针

    swift - 设备 token 未保存

    android - 从最近的托盘中删除 Android 应用程序时,Firebase(FCM)通知不会出现

    language-agnostic - 准确的MIME类型检测需要多少个字节?

    c# - 通过 C# 和 cPython 之间的管道交换数据